当前位置:   article > 正文

mysql left join 效率_SQL中 LEFT JOIN ON 条件的效率高低比较?

子查询和条件写在on后面那个效率高

这里按 MySQL 数据库来说明,这两个查询语言,第一种是左连接的方式,第二种是左连接关联子查询的方式。

这里面主要是第二种用了子查询这种方式,关于这种情况下的子查询,又叫派生表,MySQL 对这种情况,有两种处理方式。第一种是把派生表物化,也就是生成临时表,然后再做关联操作。第二种会把派生表和外层查询合并,重新调整 SQL 语句,比如这里的第二种查询方式,就有可能直接被重新调整为第一种,如果是这种方式,那二种写法的效率肯定是一样的。

这里,根据问题,新建两张测试表 t_a和 t_b 如下,两张表 id 为主键。t_at_b

执行下面语句查看查询语句一的执行计划

explain SELECT * FROM t_a as a LEFT JOIN t_b as b ON a.id = b.id AND b.name = '123';

查看执行计划一如下

执行下面语句查看查询语句二的执行计划

explain SELECT * FROM t_a as a LEFT JOIN (SELECT * FROM t_b WHERE name = '123') b ON a.id = b.id;

查看执行计划二如下

可以看出两条语句的执行计划是一样的,从这里就可以看出,第二种查询语句,被重新调整为第一种,这时,其实这两种语句的效率是一样的。当然,这是数据量比较小的情况,数据量大的时候,也可以通过查看执行计划来查看效率。

比如执行下面的语句

explain SELECT * FROM t_a A WHERE a.key2 in (SELECT key3 FROM t_b)

查看执行计划如下

可以看出这种情况下用到了子查询(派生表)物化的方式来做关联。所以如果用到子查询物化做临时表的方式,就多了创建和访问临时表的成本,这种效率肯定就更低了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/793042
推荐阅读
相关标签
  

闽ICP备14008679号