想把两个表进行左连接,自己写了两个SQL语句:
第一个:select * from 表甲 left join 表乙 on 表甲.B=表乙.A
第二个:select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
也就是说,第二个方法是想在左连接之前,先进行一次筛选,缩减记录范围,再进行连接;但是要事先查出表甲的B列出现的值。
这两个方法在执行效率上哪一个更好一些?
第一个:select * from 表甲 left join 表乙 on 表甲.B=表乙.A
第二个:select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
也就是说,第二个方法是想在左连接之前,先进行一次筛选,缩减记录范围,再进行连接;但是要事先查出表甲的B列出现的值。
这两个方法在执行效率上哪一个更好一些?
explain select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
看一下两个语句的执行计划吧
如果A是主键或唯一键,两个sql差不多
如果符合这个条件的记录很多,而表甲符合条件的记录不多,则第一个性能更好