美文网首页JAVA技术文章
为什么子查询比连接查询(LEFT JOIN)效率低

为什么子查询比连接查询(LEFT JOIN)效率低

作者: michael_wlq | 来源:发表于2016-10-24 20:15 被阅读4089次

MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。
那么问题来了,什么是子查询?为什么它的效率不高?
子查询:把内层查询结果当作外层查询的比较条件

示例:

select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

优化方式:

可以使用连接查询(JOIN)代替子查询,连接查询不需要建立临时表,因此其速度比子查询快。

相关文章

网友评论

  • d10b65f17d53:可是当两张表的数据量非常大的时候,两表关联出来的笛卡尔积非常大。join的联查表可能达到数十万。还用关联查询吗
    88ac0589cb17:@二师兄_3dd2 我也以为子查询可以减少笛卡尔积,可是在实践中,无论是用子查询还是分两步来查询,都比不上联表查询的速度。
    d10b65f17d53:@cwjbest 过滤条件只是部分无用数据不显示,并不是不做笛卡尔积,而是两表关联笛卡尔积中根据过滤条件选出正确数据行,表A数据行50000 ,表B数据行 80000 关联出的笛卡尔积 50000 * 80000 可能符合的数据只有 几十行,但是还是做笛卡尔积的,
    cwjbest:join时一般要加条件过滤啊,不加条件只做笛卡尔积的话,两个差不多吧

本文标题:为什么子查询比连接查询(LEFT JOIN)效率低

本文链接:https://www.haomeiwen.com/subject/llwluttx.html