2.4 聚集索引上的非聚集索引

2.4  聚集索引上的非聚集索引


2.4.1  行定位器

  如果表有聚集索引,那么在非聚集索引中的行定位器不是 RID 而是行的聚集索引键。

wKioL1X5gJugYyARAAFwpiBULm8645.jpg


  在上图所示的索引查找中,为了查找某条记录,数据库引擎首先在非聚集索引中找到符合条件的索引值;而该索引值是某数据行的聚集索引键,于是数据库引擎将继续通过聚集索引来查找符合条件的数据行。 



2.4.2  创建非聚集索引

  在聚集索引上创建非聚集索引和在堆上创建非聚集索引,使用相同的语法。使用 NONCLUSTERED 属性指定创建为非聚集索引。

CREATE NONCLUSTERED INDEX IX_Orders_Date

  ON Orders(OrderDate, OrderNum)


  查看此聚集索引上的所有索引。

DBCC SHOWCONTIG ("Orders") WITH ALL_INDEXES


  查询的结果示例如下:

DBCC SHOWCONTIG 正在扫描 'Orders' 表...

表: 'Orders' (277576027);索引 ID: 1,数据库 ID: 8

已执行 TABLE 级别的扫描。

- 扫描页数................................: 4495

- 扫描区数..............................: 566

- 区切换次数..............................: 565

- 每个区的平均页数........................: 7.9

- 扫描密度 [最佳计数:实际计数].......: 99.29% [562:566]

- 逻辑扫描碎片 ..................: 0.42%

- 区扫描碎片 ..................: 1.59%

- 每页的平均可用字节数.....................: 921.0

- 平均页密度(满).....................: 88.62%


DBCC SHOWCONTIG 正在扫描 'Orders' 表...

表: 'Orders' (277576027);索引 ID: 2,数据库 ID: 8

已执行 LEAF 级别的扫描。

- 扫描页数................................: 71

- 扫描区数..............................: 10

- 区切换次数..............................: 9

- 每个区的平均页数........................: 7.1

- 扫描密度 [最佳计数:实际计数].......: 90.00% [9:10]

- 逻辑扫描碎片 ..................: 1.41%

- 区扫描碎片 ..................: 30.00%

- 每页的平均可用字节数.....................: 119.0

- 平均页密度(满).....................: 98.53%


DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。


  上述查询结果中,INDEX_ID=1 表示基础表是一个聚集索引,INDEX_ID=2 则是表示是一个非聚集索引。



2.4.3  唯一非聚集索引

  非聚集索引中的数据行即可以唯一,也可以不唯一,取决于定义这个索引时的 UNIQUE 设置。

  如果未使用 UNIQUE 属性创建非聚集索引,SQL Server 将行定位符与索引键进行组合,以便生成唯一的索引行。

  在创建唯一索引时必须使用 UNIQUE 属性。



本文出自 “SQL Server 管理员指南” 博客,谢绝转载!

你可能感兴趣的:(索引)