如果表数据具有聚簇索引,那么它是如何存储的

Sex*_*ast 3 sql indexing clustered-index

我发现很多帖子开始像很多时候我遇到过人们说"Clustered Index物理上根据Clustered Index Keys对表中的数据进行排序".这不是真的!然后这些帖子继续描述它是如何实际存储的,通过链表等.例如,这篇文章说的那样

每个Index行包含一个Key值和一个指向B树中间级别页面的指针,或指向Leaf级别中的数据行.索引的每个级别中的页面都链接在双向链接列表中.数据链中的页面及其中的行按Clustered Index键的值排序.

这使我想到我的问题,数据页在表中的数据存储,正确的地方吗?因此,如果对它们进行排序并且其中的数据也根据索引列值进行排序,那么为什么说聚簇索引将表数据按排序顺序保存呢?这是Kalen Delaney的书中的图片,其中显示带有CI的表中的叶子页面都根据CI值进行排序:

在此输入图像描述

Mar*_*ith 6

你是对的.

聚簇索引不会基于聚簇索引键对表内的数据进行物理排序.如果是这种情况,那么插入到没有可用空间的大表中间将需要大量的IO来为新记录腾出空间.

而是从文件中的任何位置分配新页面并链接到链接列表.

页面的物理顺序与逻辑顺序的不同程度是逻辑碎片的程度.重建或重组索引可以减少这种情况.