非聚集索引可以在有聚集索引的表、堆集或索 引视图上定义。非聚集索引中的行定位器有两 种形式 ●如果表是堆集(没有聚集索引),行定位器 就是指向行的指针。该指针用文件标识符 ID)、页码和页上的行数生成。整个指针称为 行ID。 ●如果表没有聚集索引,或者索引在索引视图 上,则行定位器就是行的聚集索引键。如果聚 集索引不是唯一的索引, SQL Server将添加在 内部生成的值以使重复的键唯一。用户看不到 这个值,它用于使非聚集索引內的键噍一
非聚集索引可以在有聚集索引的表、堆集或索 引视图上定义。非聚集索引中的行定位器有两 种形式: ●如果表是堆集(没有聚集索引),行定位器 就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为 行 ID。 ●如果表没有聚集索引,或者索引在索引视图 上,则行定位器就是行的聚集索引键。如果聚 集索引不是唯一的索引,SQL Server将添加在 内部生成的值以使重复的键唯一。用户看不到 这个值,它用于使非聚集索引内的键唯一
id indid =0 root 根节点 个下下一个 索引行 叶节点 ⌒[一个一个 上二不一 索引行 引|行 索引|行 数据页 个|下 □下 效据行 数据行 图72非聚集索引的结构示意图
图7.2 非聚集索引的结构示意图
723聚集和非聚集索引的性能比较 当进行单行查找时,聚集索引的输入输出 速度比非聚集索引快,因为聚集索引的索 引级别较小。聚集索引非常适合于范围查 询,因为服务器可以缩小数据范围,先得 到第一行,再进行扫描,无需再次使用索 引;非聚集索引速度稍慢,占用空间特别 大,但也是一种较好的表扫描方法。非聚 集索引可能覆盖了查询的全部过程。也就 是说,假如所翕数据在索引中,服务器就 不必再返回到数据行中
7.2.3 聚集和非聚集索引的性能比较 当进行单行查找时,聚集索引的输入输出 速度比非聚集索引快,因为聚集索引的索 引级别较小。聚集索引非常适合于范围查 询,因为服务器可以缩小数据范围,先得 到第一行,再进行扫描,无需再次使用索 引;非聚集索引速度稍慢,占用空间特别 大,但也是一种较好的表扫描方法。非聚 集索引可能覆盖了查询的全部过程。也就 是说,假如所需数据在索引中,服务器就 不必再返回到数据行中