如果两个表关联查询,如下
from a,b
where a.id=b.id(+)
  and a.type=1
a.type有索引,请问此查询是否用到a.type索引,执行计划里面我看a表是全表扫描!
请高手确认下,最好给出合理解释,谢谢!

解决方案 »

  1.   

    要看a.type中的数据有没有NULL的,如有则不能用到索引了
    但这样的关联,当B表没有数据而A表有数据的时候,则a.type一定是NULL了,所以用不到索引
      

  2.   

    不太明白,“当B表没有数据而A表有数据的时候,则a.type一定是NULL了”不见得吧,a.type是全部非空的,a和b是用id关联而不是type关联的
    那请问什么情况下会用到索引呢?多谢赐教!
      

  3.   

    与数据分布有关,如果表a中type的值很少,或者是type=1的记录很多,优化器都可能选择使用对表a做全表扫描。还有一种可能是type的类型是字符型,where条件中写成type=1也是不使用索引。
      

  4.   

    经过大量测试,感觉用(+)外关联还是不保险,用left join可以确保使用索引,谢谢大家的帮助!