想把两个表进行左连接,自己写了两个SQL语句:
第一个:select * from 表甲 left join 表乙 on 表甲.B=表乙.A
第二个:select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
也就是说,第二个方法是想在左连接之前,先进行一次筛选,缩减记录范围,再进行连接;但是要事先查出表甲的B列出现的值。
这两个方法在执行效率上哪一个更好一些?

解决方案 »

  1.   

    这个要看执行计划。另外,第一个语句,最后是不是也要加上 WHERE  表乙.A IN () ?
      

  2.   

    explain select * from 表甲 left join 表乙 on 表甲.B=表乙.A
    explain select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
    看一下两个语句的执行计划吧
      

  3.   

    mysql比较笨,第二个的执行计划必然是先执行括号中的“select * from 表乙 where 表乙.A IN ('101',102)”
    如果A是主键或唯一键,两个sql差不多
    如果符合这个条件的记录很多,而表甲符合条件的记录不多,则第一个性能更好