首页 新闻 会员 周边 捐助

求解:为是什么同样的SQL语句执行效果不一样 ?

0
悬赏园豆:30 [待解决问题]

前提:

数据表: 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:索引扫描

到底是为什么?

guoja的主页 guoja | 初学一级 | 园豆:172
提问于:2011-07-28 16:10
< >
分享
所有回答(5)
0

可能是

Projectid=2148  数据只一条

Projectid=2160的数据有好多,

调调儿 | 园豆:155 (初学一级) | 2011-07-28 17:54
正解.
支持(0) 反对(0) LoveJenny | 园豆:532 (小虾三级) | 2011-07-28 19:25
0

对于需要做书签查找的非聚集索引,如果数据量很大的话,通常选择率在3%以下时,才会先做非聚集索引查找,然后再做书签查找操作。否则的话会直接扫描聚集索引。因为做书签查找时,在选择率很高的情况下,对于IO操作的次数,查找操作要高于扫描操作。也就更费时。所以查询优化引擎会选择扫描操作。当然这个阀值没有官方的数字,只是有人做过一些实验得出来的,不一定准确。

刘鸿海 | 园豆:655 (小虾三级) | 2011-07-29 08:33
0
杯具程序员 | 园豆:1718 (小虾三级) | 2011-07-29 09:21
0

可能是因为你这个不是主键或者不是自增长的,再添加数据的时候是同个ID,所以第一条出来就只有一个,第二条因为有很多相同的所以出来就多

咆哮的野猪 | 园豆:60 (初学一级) | 2011-07-29 09:48
0

可能是:

应该是表中还有一个聚集索引

第一种可能行数较少,索引查找最优

第二种可能满足条件的行数较多,通过非聚集索引查找索引页,然后通过聚集键查找具体页地址的开销大于直接聚集索引扫描,所以选择了索引扫描

JentleWang | 园豆:160 (初学一级) | 2011-08-21 20:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册