这两个数据表左连接方法,哪一个效率会更高一些呢?

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

...全文
556 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hghua 2018-07-26
  • 打赏
  • 举报
回复
mysql比较笨,第二个的执行计划必然是先执行括号中的“select * from 表乙 where 表乙.A IN ('101',102)”
如果A是主键或唯一键,两个sql差不多
如果符合这个条件的记录很多,而表甲符合条件的记录不多,则第一个性能更好
牛尚小又何妨 2018-07-26
  • 打赏
  • 举报
回复
条件相同的情况下,是否高效取决于执行计划。系统从多个执行计划中取代价最小的那个,所以有可能执行计划都是一样的。
zjcxc 2018-07-23
  • 打赏
  • 举报
回复
两个结果的条件都不一样,理论上条件多的,有索引且过滤效果明显的效率好些
yyk7248 2018-07-21
  • 打赏
  • 举报
回复
引用 3 楼 MW_long 的回复:
就你目前这两个表内容, 没什么区别

我这是举个例子,实际数据远比这复杂
MW_long 2018-07-21
  • 打赏
  • 举报
回复
就你目前这两个表内容, 没什么区别
Rotel-刘志东 2018-07-18
  • 打赏
  • 举报
回复
explain select * from 表甲 left join 表乙 on 表甲.B=表乙.A
explain select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
看一下两个语句的执行计划吧
卖水果的net 2018-07-18
  • 打赏
  • 举报
回复
这个要看执行计划。

另外,第一个语句,最后是不是也要加上 WHERE 表乙.A IN () ?

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧