SQLServer——非聚集索引结构
来源:互联网 发布:如何利用网络挣钱 编辑:程序博客网 时间:2024/05/29 02:48
非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点:
- 基础表的数据行不按非聚集键的顺序排序和存储。
- 非聚集索引的叶层是由索引页而不是由数据页组成。
既可以使用聚集索引来为表或视图定义非聚集索引,也可以根据堆来定义非聚集索引。非聚集索引中的每个索引行都包含非聚集键值和行定位符。此定位符指向聚集索引或堆中包含该键值的数据行。
非聚集索引行中的行定位器或是指向行的指针,或是行的聚集索引键,如下所述:
- 如果表是堆(意味着该表没有聚集索引),则行定位器是指向行的指针。该指针由文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID (RID)。
- 如果表有聚集索引或索引视图上有聚集索引,则行定位器是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 将添加在内部生成的值(称为唯一值)以使所有重复键唯一。此四字节的值对于用户不可见。仅当需要使聚集键唯一以用于非聚集索引中时,才添加该值。SQL Server 通过使用存储在非聚集索引的叶行内的聚集索引键搜索聚集索引来检索数据行。
对于索引使用的每个分区,非聚集索引在 index_id >0 的 sys.partitions中都有对应的一行。默认情况下,一个非聚集索引有单个分区。如果一个非聚集索引有多个分区,则每个分区都有一个包含该特定分区的索引行的 B 树结构。例如,如果一个非聚集索引有四个分区,那么就有四个 B 树结构,每个分区中一个。
SELECT * FROM sys.partitionswhereindex_id >0
根据非聚集索引中数据类型的不同,每个非聚集索引结构会有一个或多个分配单元,在其中存储和管理特定分区的数据。每个非聚集索引至少有一个针对每个分区的 IN_ROW_DATA 分配单元(存储索引 B 树页)。如果非聚集索引包含大型对象 (LOB) 列,则还有一个针对每个分区的 LOB_DATA分配单元。此外,如果非聚集索引包含的可变长度列超过 8,060 字节行大小限制,则还有一个针对每个分区的ROW_OVERFLOW_DATA分配单元。B 树的页集合由sys.system_internals_allocation_units系统视图中的root_page 指针定位。
下图说明了单个分区中的非聚集索引结构。
- SQLServer——非聚集索引结构
- SQLServer——聚集索引结构
- SQLSERVER的非聚集索引结构
- SQLSERVER聚集索引与非聚集索引
- SQLSERVER聚集索引与非聚集索引
- SQLSERVER聚集索引与非聚集索引
- 非聚集索引结构
- 【数据库】——聚集索引和非聚集索引
- MySQL系列—聚集索引和非聚集索引
- SQLSERVER聚集索引与非聚集索引(转载)
- SQLSERVER聚集索引与非聚集索引(转)
- SQLSERVER聚集索引与非聚集索引(转)
- SQLSERVER聚集索引与非聚集索引区别
- SQLSERVER聚集索引与非聚集索引区别
- SQLSERVER聚集索引与非聚集索引(转)
- SQLServer的聚集索引和非聚集索引
- sqlserver 聚集索引和非聚集索引实例
- SQLSERVER聚集索引与非聚集索引(转)
- delphi线程的创建、挂起、激活与终止
- linux笔记
- 学习android第一篇:图片的放大缩小
- F1026 File not found: 'DockForm.dcu
- Mysql COALESCE的使用
- SQLServer——非聚集索引结构
- 关于在JS中动态获得action的值
- UIScrollView的属性总结
- 开机adb可能不认设备,执行adb devicesi会出现:
- HDU 2112 最短路径
- 黑马程序员-枚举
- Jquery-zTree的基本用法
- 3.3.2 单链表内节点的删除
- 网址管理系统