【发布时间】:2014-02-14 02:57:27
【问题描述】:
我们有一个索引列 (ModelName),它在表中非常重要,与“目录编号”非常相似,但它不是 PK。
很多ORDER by ModelName ; WHERE ModelName 等,正在使用中。
该列最初以 NVarchar(50) 开头,但随着时间的推移将大小更改为 100,现在需要为 255。
我在"NVarchar(MAX) vs. NVarChar(N)"上找到了很多帖子,但我无法得到一个确定的答案:
使用NVarchar(255) 代替NVarchar(100) 代替NVarchar(50) 是否会对索引造成任何/显着的性能影响?
就性能而言,较短的列大小 (50) 是否比较长的 (255) 更好?是否可以对此类Index进行特殊设置以提高性能?
这是@a_horse_with_no_name 在 cmets 中提供的另一个参考:
Best practices for SQL varchar column length
注意 Ariel 的回答:https://stackoverflow.com/a/8295195/1140885
上面写着:
"具体来说,在进行排序时,较大的列确实占用更多 空间,所以如果这会损害性能,那么你需要担心它 并让它们变小。”
,在 cmets 中:
“索引也有问题和限制需要考虑。你 当所有四列都是 VARCHAR(255) 时,不能有 (a,b,c,d) 索引"
没有明确的结论/参考文档等
【问题讨论】:
-
nvarchar(42)、nvarchar(255)或nvarchar(639)在性能方面没有区别。另请参阅:stackoverflow.com/q/8295131/330315 -
@a_horse_with_no_name,感谢您的链接,但是,
NVarchar和Varchar执行相同吗?我的问题是针对NVarchar。 -
@a_horse_with_no_name,此外,您提供的问题/答案(非常有趣 +1)根本没有解决索引问题。就在 cmets 中,它建议
"there are issues and limitations on indexes to consider, too. You can't have a (a,b,c,d) index when all four columns are VARCHAR(255)"和"Specifically, when doing sorting, larger column do take up more space"... -
只有在列中存储了更多数据时,索引才会受到影响。如果
varchar(10)和varchar(100)列上的索引存储相同的数据,则它的索引将相同。您应该看到 varchar/nvarchar 列的长度限制更像是一种约束,而不是技术配置。 -
@a_horse_with_no_name: 但在
nvarchar(639)列上,您将无法创建索引,因为最大值。该列的大小大于索引条目的 900 字节 限制。只是说。 ... :-)
标签: sql-server sql-server-2005 indexing nvarchar