随着群集密钥大小的增加,非群集索引的性能和大小会下降?

时间:2010-01-25 11:46:34

标签: sql-server pointers indexing

摘自:http://www.sqlservercentral.com/articles/Indexing/68563/

  

聚类键的宽度   但是,不会影响   聚集索引。群集密钥,   是行的地址,位于   每个非聚集索引。于是   一个宽的聚类键增加了   所有非聚簇索引的大小,   也降低了他们的效率

如果sizeof(int *)与sizeof(char *)相同,为什么非聚集索引中指向数据页的指针的大小会增加。还是有其他一些我不知道的寻址机制?

2 个答案:

答案 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)上的索引。

其大小当然取决于col1col2col3的大小。