Tim*_*ero 3 sql-server clustered-index
我将向一个相当大的表添加一个聚集索引:
有一Id列可能用于索引键,但它是nvarchar(18)和not unique(尽管那里没有重复值)。
但是我不愿意使用它,因为它的数据类型(性能影响)并且一直在考虑添加一int identity(1,1)列并将其用作聚集索引键。
您更愿意推荐哪种解决方案?TIA
一直在考虑加一个INT identity(1,1)列,作为聚集索引键
是的,这是一种方法
为什么 - 请阅读以下内容:
良好聚集索引的要求:
1)不断增加
这将有助于减少未来的索引碎片
2) 唯一
如果聚集索引键行不唯一,SQL Server 会自动添加额外的隐藏 INT uniquifier(4 字节)以使聚集索引键唯一,这增加了聚集索引和非聚集索引(它们)的存储要求也受聚集索引宽度的影响,因为它们包含聚集索引键的隐藏副本)
3)Narrow
选择尽可能小的数据类型,因为它再次增加了存储和RAM要求,并降低了性能
这就是为什么Id nvarchar(18)您拥有的不是聚集索引键的不良候选者,所以继续添加 INT identity(1,1) 列