概括:
这里说的聚集索引是聚簇索引
聚簇索引即建立在聚簇上的索引,创建聚簇索引时,需要对已有表数据重新进行排序(若表中已有数据),即删除原始的表数据后再将排序结果按物理顺序插回,故聚簇索引建立完毕后,建立聚簇索引的列中的数据已经全部按序排列。
一个表中只能包含一个聚簇索引,但该索引可以包含多个列。
B-树索引中,聚簇索引的叶层就是数据页。
非聚簇索引类似书本索引,索引与数据存放在不同的物理区域,建立非聚簇索引时数据本身不进行排序。一个表中科含多个非聚簇索引。
B-树索引中,非聚簇索引的叶层仍是索引页,其以指针指向数据页实际存储位置。
详解,列子:
非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点:
基础表的数据行不按非聚集键的顺序排序和存储。
非聚集索引的叶层是由索引页而不是由数据页组成。
非聚集索引既可以建在堆表结构上也可以建在聚集索引表上;非聚集索引中的每个索引行都包含非聚集键值和行定位符。此定位符指向聚集索引或堆中包含该键值的数据行。
如果表是堆则行定位器是指向行的指针。该指针由文件标识符 (ID) 、页码和页上的行数生成。整个指针称为行 ID (RID) 。
如果表包含有聚集索引,则行定位器是行的聚集索引键。如果聚集索引不是唯一的索引, SQL Server 将添加在内部生成的值(称为唯一值)以使所有重复键唯一。此四字节的值对于用户不可见。仅当需要使聚集键唯一以用于非聚集索引中时,才添加该值。 SQL Server 通过使用存储在非聚集索引的叶行内的聚集索引键搜索聚集索引来检索数据行。
B 树的页集合由 sys.system_internals_allocation_units 系统视图中的 root_page 指针定位。
来源:https://www.cnblogs.com/scottpei/archive/2012/02/16/2353793.html