我们有一个索引列(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)索引“
没有明确的结论/参考文档等。
答案 0 :(得分:2)
在可变长度数据类型上,如果继续累积数据,索引将受到影响。尺寸越大,B树中组合的机会越多,有效地增加了索引大小。在某些时候,索引大小将太大,查询将受到影响。另一方面,如果您将所有类似的数据集作为ModelName进入,则不会有太多问题
如果型号名称类似于AAABB,AAABC,AAACC等,它不会扼杀您的表现,但彼此的标准偏差变高,指数表现会因为庞大的尺寸而变差