【发布时间】:2012-08-26 02:01:35
【问题描述】:
我在 Stackoverflow 中看到了 this 的帖子。第一个答案提到类似 聚集索引具有表的所有数据,而非聚集索引只有列 + 聚集索引的位置或行(如果它在堆上)(没有聚集的表index)。 非聚集索引如何获得聚集索引的位置?它只包含在 B 树中排序为节点的列值,每个节点都固定到该列具有该节点值的行,对吧?
【问题讨论】:
-
如果在
a列上定义了非聚集索引,在b上定义了聚集索引,那么将有两个单独的结构。聚集索引将包含根据b中的值按排序顺序排列的行,然后非聚集索引会将a中的值排列在带有指向数据的指针的 B 树中(根据值在b'). How can the non-clustered index accommodate another columnb`? -
在这种情况下,您的非聚集索引将在其叶级页面中包含
b(聚集键)的值。如果在非聚集索引中找到a的值,但您的查询需要更多数据(例如SELECT *......),则使用b值,键查找到聚集索引恰好找到实际的数据页并返回查询的值
标签: sql-server indexing b-tree clustered-index non-clustered-index