可能重复:
is there an advantage to varchar(500) over varchar(8000)?
我目前正在开发一个包含varchar(50)列的表。我们现在必须在一些列中插入的数据超过50个字符,因此我们必须将列大小从50更改为128这些列,因为我们有很多列,浪费时间来更改单个列。
所以我向我的团队提出,为什么我们不把所有列都改为varchar(128)。一些队友认为,这会在选择和加入操作期间造成性能损失。
现在我不是数据库方面的专家,但我不认为从varchar 50迁移到varchar 128会导致任何重大的性能损失。
P.S - 我们在这些专栏中没有任何姓名,地址类型的数据。
答案 0 :(得分:4)
varchar(50)
和varchar(128)
的行为几乎完全相同。 50个字符以下的值的存储大小相同。它们可以互换地加入(varchar(50)
加入varchar(128)
)w / o类型转换问题(即varchar(50)
上的索引可以在联接中寻找列varchar(128)
)和同样适用于WHERE谓词。在SQL Server 2012之前,增加varchar
列的大小是一个非常快速的元数据操作,在SQL Server 2012之后,此操作可能是一个缓慢的数据更新大小 - 在某些条件下的每次记录操作,类似于Adding a nullable column can update the entire table中描述的操作。
任何列长度更改都可能产生一些问题:
varchar(50)
)varchar(50)
列的复合索引,扩展到varchar(128)
将超过最大索引大小900并触发警告。马丁关于记忆补助的警告是一个非常有效的问题。我会购买更多内存,如果这确实是一个问题。
答案 1 :(得分:3)
答案 2 :(得分:0)
这样的列数是多少?最佳实践规则表明您需要仔细规划每个列并相应地定义大小。您应该识别适合varchar(128)的列,而不是盲目地增加所有列的大小。
答案 3 :(得分:0)
我建议只更改需要更改的列。如果任何列中不需要超过50个字符,请不要更改。
为什么你要为所有列的长度设置相同?我怀疑所有列都有相同的长度要求。