为什么这个聚簇索引比sql server中的非聚簇索引更高

时间:2013-10-09 17:38:39

标签: sql-server

我对执行计划有些新意。我一直都知道聚簇索引要快得多,因为实际数据行包含在索引树的叶级中,而非聚簇只包含索引列值加上指向其余行数据位置的指针。因此,非群集具有比群集更多的IO。

为了测试这一点,我使用1,000,000记录表作为主键EmployeeID(第一列),然后在同一字段上添加了非聚集索引。然后我使用查询提示来比较正在使用的每个索引的结果。

Select EmployeeID from Employees with(index(PK_EmployeeID))
go

select EmloyeeID from Employees with(index(IX_EmployeeID))
go

结果显示,群集的IO和查询成本(相对于批处理)比非群集更多。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

对于测试查询,索引是“覆盖”索引,因为它已包含结果集所需的所有列。因此,不需要对实际表进行额外读取。而且因为索引较小(页面较少),访问速度更快 聚簇索引实际上是表本身,按索引排序。因为它包含更多列,所以需要更多页面读取。