我对执行计划有些新意。我一直都知道聚簇索引要快得多,因为实际数据行包含在索引树的叶级中,而非聚簇只包含索引列值加上指向其余行数据位置的指针。因此,非群集具有比群集更多的IO。
为了测试这一点,我使用1,000,000记录表作为主键EmployeeID
(第一列),然后在同一字段上添加了非聚集索引。然后我使用查询提示来比较正在使用的每个索引的结果。
Select EmployeeID from Employees with(index(PK_EmployeeID))
go
select EmloyeeID from Employees with(index(IX_EmployeeID))
go
结果显示,群集的IO和查询成本(相对于批处理)比非群集更多。有人可以解释一下吗?
答案 0 :(得分:4)
对于测试查询,索引是“覆盖”索引,因为它已包含结果集所需的所有列。因此,不需要对实际表进行额外读取。而且因为索引较小(页面较少),访问速度更快 聚簇索引实际上是表本身,按索引排序。因为它包含更多列,所以需要更多页面读取。