我的表有4列(empId,name,age,location)
和empId
上的聚集索引(主键)和name
上的非聚集索引。
当我尝试运行像
这样的查询时select empId from tblname
它在表上执行非聚簇索引扫描。即使我在empId上创建了聚簇索引。为什么?
答案 0 :(得分:1)
它有什么不对,它做非群集扫描,因为sql引擎是以这种方式设计的。让我向您解释一下它如何选择您的数据以及为什么这样做。
您只选择了emp id。它存储在DB的两个位置。一个地方是您的数据页面,第二个是您的非群集索引页面。 由于您在名称上创建了非集群索引,并且您还在emp id上有一个集群索引,因此您的非集群索引包含emp id,因为您有集群索引。
如果sql没有使用集群索引,它将从数据页面中选择数据,在这种情况下,它需要读取更多的页面。
如果sql使用的是非集群索引,则需要只读取集群索引页面,并且imp已经存在于非集群索引页面中,因此读取率很低。
希望我能让你受到支持。