群集和非群集索引扫描和搜索

时间:2017-04-04 07:20:35

标签: sql-server

我的表有4列(empId,name,age,location)empId上的聚集索引(主键)和name上的非聚集索引。

当我尝试运行像

这样的查询时
select empId from tblname

它在表上执行非聚簇索引扫描。即使我在empId上创建了聚簇索引。为什么?

1 个答案:

答案 0 :(得分:1)

它有什么不对,它做非群集扫描,因为sql引擎是以这种方式设计的。让我向您解释一下它如何选择您的数据以及为什么这样做。

您只选择了emp id。它存储在DB的两个位置。一个地方是您的数据页面,第二个是您的非群集索引页面。  由于您在名称上创建了非集群索引,并且您还在emp id上有一个集群索引,因此您的非集群索引包含emp id,因为您有集群索引。

如果sql没有使用集群索引,它将从数据页面中选择数据,在这种情况下,它需要读取更多的页面。

如果sql使用的是非集群索引,则需要只读取集群索引页面,并且imp已经存在于非集群索引页面中,因此读取率很低。

希望我能让你受到支持。