集群索引和非集群索引

问题描述 投票:0回答:2

采访者问我聚集索引和非聚集索引之间的区别,然后进一步深入并询问了一个问题-当表具有聚集索引和非聚集索引时,非聚集索引是否仍指向表中的数据行?我说是的,立即我以为是错的。它是否指向按聚簇索引排序的数据行或原始数据行?有人可以对此发表一些看法。

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

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


0
投票
[实际表按聚簇索引列的顺序存储。非聚簇索引键列与实际表分开存储在不同的表中。

下面有一篇关于聚簇和非聚簇索引的不错的文章:它将为您提供一个关于索引的好主意: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

© www.soinside.com 2019 - 2024. All rights reserved.