临时表中的varchar大小重要吗?


16

在我妻子的工作中,关于仅对存储过程中的临时表中的varchar(255)所有varchar字段使用都存在争议。基本上,一个营地希望使用255,因为即使定义更改,它也将始终有效,而另一个营地则希望坚持使用源表中的大小以提高性能。

表演营对吗?还有其他含义吗?他们正在使用SQL Server。


我认为也许您一开始不需要临时表。它们是用来干什么的?如果需要它们,这些特定的列是用来做什么的?是否将它们用于任何形式的联接或比较中?是否有任何基础列nvarchar而不是varchar?
亚伦·伯特兰

@AaronBertrand临时表用于模块化。数据会根据可能更改的业务规则进行多次转换和填充。我认为也有一些MAX()
布赖恩·尼克

Answers:


6

根据您使用临时表的方式,您可能会遇到数据截断问题。

这个例子有些人为,但它说明了我的观点。例:

  1. 您的用户表列是varchar(50)。
  2. 您的临时表列为varchar(255)。
  3. 您的用户表的该列中有一个包含45个字符的记录。
  4. 在您的过程中,在将临时表合并到用户表之前,将“-为胜利”连接到该列的末尾。

临时表很乐意接受长度为59的新varchar值。但是,您的用户表不能。根据您在过程中的处理方式,这可能会导致截断或错误。

除非您记录并解决这些问题,否则您的过程可能会以意外的方式执行。

就个人而言,我认为这个问题没有一个答案是100%正确的。这实际上取决于您如何使用这些临时表。

希望这可以帮助


0

使用varchar(255)所有varchar在存储过程中的临时表中的字段。

我倾向于使用实际的字段长度。

我最近读到MySQL(我假设SQL Server相似)临时表分配了足够的内存来存储每一varchar列的最大长度...一种系统的方法,为varchar所有字段分配200%-500%的所需内存存储过程似乎不必要地消耗了系统资源。如果您曾经使用大量的内存来创建这些临时表,那么您可能会不必要地要求使用用于缓存的内存,甚至在存储过程完成后,在将来的某个时候为服务器创建更多的工作。

编辑:参见比尔·卡文(Bill Karwin)的回答:https : //stackoverflow.com/questions/1962310/importance-of-varchar-length-in-mysql-table


2
假设SQL Server是相似的?我不会...
AK 2012年

抱歉,我意识到我的回答不完整。我的意思是,除非确定被认为是错误的,否则我会谨慎行事(即不要做出可能对性能产生负面影响的更改)。
马特2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.