非聚集索引
非聚集索引是指一种索引类型,在这种索引中,索引的逻辑顺序与其在磁盘上的实际物理存储顺序并不一致。
特征
非聚集索引具有B树结构,但它与聚集索引相比有两个显著区别:首先,数据行并非按照非聚集索引键的顺序进行排序和存储。其次,非聚集索引的叶子节点不包含数据页,而是包含索引行。每条索引行包括非聚集键值以及一个或多个行定位器,这些行定位器指向含有相应键值的数据行。如果索引是非唯一的,行定位器可能指向多行。非聚集索引可以建立在带有聚集索引的表、堆集或索引视图之上。在微软® SQL Server™ 2000中,非聚集索引中的行定位器有两种形式:对于堆集表(无聚集索引),行定位器是指向行的指针,由文件标识符(ID)、页码和页上的行号组成,构成完整的行ID。而对于拥有聚集索引的表或索引视图,行定位器则是行的聚集索引键。如果聚集索引不是唯一的,SQL Server 2000会自动添加内部生成的值以确保非聚集索引内的键唯一性。这些内部生成的值对用户不可见,仅用于保持非聚集索引内的键唯一性。SQL Server通过使用聚集索引键查找聚集索引来获取数据行,而聚集索引键则保存在非聚集索引的叶子行中。由于非聚集索引将聚集索引键作为其行指针存储,因此保持聚集索引键尽可能小非常重要。如果表还包含非聚集索引,请勿选择较大的列作为聚集索引的键。
应用实例
汉语字典的正文部分实际上就是一个聚集索引的例子。在字典中查找某个汉字时,我们通常会根据其拼音首字母的位置快速翻阅相应的页面。例如,“安”字因其拼音“an”位于“A”区,所以会在字典的前部找到;而“张”字因其拼音“zhang”位于“Z”区,所以我们会在字典的后部寻找。这种直接在正文内容中查找的方式,无需额外查阅目录,是因为正文内容本身就按照一定的规则有序排列,形成了一个目录,即聚集索引。需要注意的是,每个表只能有一个聚集索引,因为目录只能按照一种方式进行排序。
参考资料
什么是聚集索引和非聚集索引?.csdn.2024-11-02
非聚集索引结构.microsoft.2024-11-02
Mysql - 聚集索引与非聚集索引的区别.博客园.2024-11-02