日期:2014-05-16  浏览次数:20608 次

两表联合查询,怎么不走索引?
如下图所示,是什么原因呢?



------解决方案--------------------
1、你用了*
2、箭头粗细,数据量有点大,可能走扫描
3、没有有效的where条件,你那个where是关联用的
------解决方案--------------------
之所以不用索引,最关键的是你没有加where条件。

索引只有在数据量较大,且只返回大概整个表数据的10%的时候,才会速度比较快。

如果你的表数据量相对较小,而且你又没有where条件来过滤数据,从而只取出10%的数据,那么sql server自动就会用聚集索引扫描或者表扫描的,这样的效率反而比索引高
------解决方案--------------------
1、确保你只查询所需的列
2、针对select、where中的列加上索引
3、看看能不能加上具有筛选性质的where条件,而不是想你现在写法那样,仅仅是关联,你的写法等效于:
select *
from a inner join b on a.xx=b.xx
你可以看到是没有“筛选条件”,注意却分筛选和关联
------解决方案--------------------
没有查询条件,只是关联的条件,走 IX 也不会提高效率。