使用NVarchar(50)与NVarchar(255)列的索引?

时间:2014-01-23 13:58:13

标签: sql-server sql-server-2005 indexing nvarchar

我们有一个索引列(ModelName),它在表中非常重要,与“目录号”非常相似,但它不是PK。

很多ORDER by ModelName;正在使用WHERE ModelName等。

该列最初以NVarchar(50)开头,但随着时间的推移将大小更改为100,现在需要为255.

我在"NVarchar(MAX) vs. NVarChar(N)"找到了很多帖子,但我无法得到确凿的答案:

使用NVarchar(255)代替NVarchar(100)代替NVarchar(50)是否有任何/显着的性能影响,特别是索引

在性能方面,较短的色谱柱尺寸(50)是否比较长的色谱柱(255)更好?是否可以对此类索引进行特殊设置以提高性能?


以下是@a_horse_with_no_name注释中提供的另一个参考:

Best practices for SQL varchar column length

Ariel的回答:https://stackoverflow.com/a/8295195/1140885

它说:

  

“具体来说,在进行排序时,较大的列会占用更多   空间,所以如果这会伤害性能,那么你需要担心它   并使它们变小。“

,并在评论中:

  

“索引也存在问题和限制。你   当所有四列都是VARCHAR(255)时,不能有(a,b,c,d)索引“

没有明确的结论/参考文档等。

1 个答案:

答案 0 :(得分:2)

在可变长度数据类型上,如果继续累积数据,索引将受到影响。尺寸越大,B树中组合的机会越多,有效地增加了索引大小。在某些时候,索引大小将太大,查询将受到影响。另一方面,如果您将所有类似的数据集作为ModelName进入,则不会有太多问题

如果型号名称类似于AAABB,AAABC,AAACC等,它不会扼杀您的表现,但彼此的标准偏差变高,指数表现会因为庞大的尺寸而变差