群集和非群集索引

时间:2015-12-07 05:00:12

标签: sql-server clustered-index non-clustered-index

采访者问我聚集索引和非聚集索引之间的区别,并进一步深入其中并再问一个问题 - 当一个表有聚簇索引和非聚簇索引时,非聚集索引仍然指向表中的数据行?我说是的,我立刻认为这是错的。它是否指向聚集索引或原始数据行排序的数据行?有人可以对此有所了解。

2 个答案:

答案 0 :(得分:1)

非聚集索引不会对表中的物理数据进行排序。实际上,非聚集索引存储在一个位置,表数据存储在另一位置。这类似于教科书,其中书的内容位于一个位置,索引位于另一个位置。这样一来,每个表可以有一个以上的非聚集索引。重要的是要在表中提到,数据在表内将按聚集索引进行排序。但是,内部非聚集索引数据按指定顺序存储。索引包含在其上创建索引的列值以及该列值所属的记录的地址。

当针对要在其上创建非聚集索引的列发出查询时,数据库将首先转到非聚集索引并在表中查找相应行的地址。然后它将转到该行地址并获取其他列值。正是由于这一额外的步骤,非聚集索引比聚集索引慢。

答案 1 :(得分:0)

实际表以Clustered index列的顺序存储。非聚簇索引键列存储在与实际表不同的表中。

下面有一篇关于聚集和非聚集索引的文章很好:
它会给你一个关于索引的好主意:
http://www.sqlservercentral.com/blogs/practicalsqldba/2013/03/14/sql-server-part-4-explaining-the-non-clustered-index-structure-/

How NonClustered Index works in SQL Server