前提:
数据表: Projectid 非聚集索引
分别执行Sql1,Sql2
SQL 1: Select LinkTitle from dbo.ProjectLink where Projectid=2148
SQL 2: Select LinkTitle from dbo.ProjectLink where Projectid=2160
在SQL执行计划中查看,1,索引查找中,2:索引扫描
到底是为什么?
可能是
Projectid=2148 数据只一条
Projectid=2160的数据有好多,
对于需要做书签查找的非聚集索引,如果数据量很大的话,通常选择率在3%以下时,才会先做非聚集索引查找,然后再做书签查找操作。否则的话会直接扫描聚集索引。因为做书签查找时,在选择率很高的情况下,对于IO操作的次数,查找操作要高于扫描操作。也就更费时。所以查询优化引擎会选择扫描操作。当然这个阀值没有官方的数字,只是有人做过一些实验得出来的,不一定准确。
可能是因为你这个不是主键或者不是自增长的,再添加数据的时候是同个ID,所以第一条出来就只有一个,第二条因为有很多相同的所以出来就多
可能是:
应该是表中还有一个聚集索引
第一种可能行数较少,索引查找最优
第二种可能满足条件的行数较多,通过非聚集索引查找索引页,然后通过聚集键查找具体页地址的开销大于直接聚集索引扫描,所以选择了索引扫描