首页 > 解决方案 > 索引基本上是表的副本吗?

问题描述

今天我去参加工作面试,在那里我听说“索引基本上是表格的克隆,它们是在上面制作的”。

有人可以与此声明相关吗?老实说,我从未听说过这种索引定义

标签: sqlsql-serverindexingdatabase-indexes

解决方案


不是真的,虽然他们可能是。

每个索引(包括聚集索引)都将使用其所有内部节点中的索引。不同的是当我们到达索引的叶子时会发生什么。

在 SQL Server 中一个普通的老式非聚集索引中,您会在叶子中找到聚集索引的键值(或堆表的某种形式的行 ID)。而在聚集索引中,您将找到所有列的值,而不仅仅是那些聚集键和(对于该索引)它是特定键的值。

INCLUDEin 索引通过在非聚集索引中包含叶级别的额外列,在某种程度上使水变得混乱。

如果非聚集索引(索引键、聚集索引键、包含列)中的总列集与表中所有列的集相同,那么在一定程度上非聚集索引似乎确实成为表的副本 - 至少在使用该索引的任何查询都不必执行任何表查找来检索所有数据的范围内。

如果上面的列集与表中所有列的集不同,则它不是表的副本。它是表列子集的副本。当然,如果该列子集是特定查询所需的所有列,则仍然可以避免表查找。


推荐阅读