摘自:http://www.sqlservercentral.com/articles/Indexing/68563/
聚类键的宽度 但是,不会影响 聚集索引。群集密钥, 是行的地址,位于 每个非聚集索引。于是 一个宽的聚类键增加了 所有非聚簇索引的大小, 也降低了他们的效率
如果sizeof(int *)与sizeof(char *)相同,为什么非聚集索引中指向数据页的指针的大小会增加。还是有其他一些我不知道的寻址机制?
答案 0 :(得分:3)
指针不指向数据页面:它指向聚集索引。微妙但不同于没有聚集索引的地方,其中每个NC索引条目指向数据页中的行ID(RID)。
因此,如果您有char(10)
作为密钥,则每个NC索引条目都有一个10字节指针。如果你有整数,则它是4个字节。
对于char vs int,还有其他注意事项:至少是校对(确定大小写,重音,假名和宽度敏感度)。
4字节的字符串仅适用于char(4)
。 nchar(4)
为8个字节,varchar(4)
为2到6个字节(2个字节长度),nvarchar(4)
为2到10个字节。
答案 1 :(得分:0)
在聚簇表中,聚类键的值是行指针,因此隐式附加到每个记录。
如果(col1, col2, col3)
是群集密钥,则col4
上的索引实际上是(col4, col1, col3, col3)
上的索引。
其大小当然取决于col1
,col2
和col3
的大小。