非聚集索引叶级

Yev*_*erg 1 sql-server nonclustered-index

创建非聚集索引时,叶级将包含对原始表中行的引用:

  • 如果表有聚集索引,则叶级将包含聚集索引键;
  • 如果表没有聚集索引(堆),则叶级将包含指向表中行的物理地址的指针;

我的问题是为什么非聚集索引没有设计为在这两种情况下包含物理地址(除了聚集索引键之外)。当定义聚集索引时,它可以保存 B-Tree 的读取以用于键查找。

Dan*_*man 5

物理行定位器不存储在非聚集索引叶节点中的原因是,每当物理行位置由于页面拆分、重组等而发生变化时,就需要更新该值。仅将 CI 键作为唯一行非聚集索引上的定位器避免了这种维护,这对于具有许多非聚集索引的表来说尤其昂贵。

请注意,对于堆来说,这不是一个需要考虑的问题,因为堆不会受到页面拆分的影响,尽管当行更新为更大的大小时,转发指针是一个考虑因素。