MySQL优化之使用连接(join)代替子查询

 更新时间:2017年10月13日 09:28:21   作者:城市里的最后一个农民  
有些时候,子查询可以被更有效的连接替代,方法仅供参考,需要的朋友可以了解下。

使用连接(JOIN)来代替子查询(Sub-Queries)

MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

DELETE FROM customerinfo 
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

SELECT * FROM customerinfo 
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:

SELECT * FROM customerinfo 
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. 
CustomerID 
WHERE salesinfo.CustomerID IS NULL 

  连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作

总结

本文关于MySQL优化之使用连接(join)代替子查询的内容就到这里,仅供参考。如有不足之处请指出。欢迎大家交流讨论。感谢朋友们对本站的支持。

相关文章

  • MySql 错误Incorrect string value for column

    MySql 错误Incorrect string value for column

    能使用中文进行搜索,但是insert into 中文是可以的。我的数据库和数据表中所有的charset都是设置的utf8。
    2010-12-12
  • MySQL OOM 系列一 Linux内存分配

    MySQL OOM 系列一 Linux内存分配

    今天想提到的是线上一个4G的RDS实例,发生了OOM(out of memory)的问题,MySQL进程被直接Kill掉了。在解释这个问题的时候,我们首先需要从Linux系统内存分配策略讲起
    2016-07-07
  • MySql COALESCE函数使用方法代码案例

    MySql COALESCE函数使用方法代码案例

    这篇文章主要介绍了MySql COALESCE函数使用方法代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • MySQL数据库存储引擎和分支现状分析

    MySQL数据库存储引擎和分支现状分析

    在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的。
    2011-03-03
  • MySQL数据库中的嵌套查询实例详解

    MySQL数据库中的嵌套查询实例详解

    这篇文章主要给大家介绍了关于MySQL数据库中嵌套查询的相关资料,嵌套查询是SQL中的一种技术,允许在一个查询语句的某个部分嵌入另一个查询,它主要用于处理复杂的逻辑,如多层条件过滤和数据对比,需要的朋友可以参考下
    2024-12-12
  • MySQL入门(五) MySQL中的索引详讲

    MySQL入门(五) MySQL中的索引详讲

    之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下去的心态了,原因可能是由于别人的影响,觉得对于MySQL来说,知道了一些复杂的查询,就够了
    2018-07-07
  • MySQL几种更新操作的案例分析

    MySQL几种更新操作的案例分析

    本文将通过一个用户账户金额更新的案例分析几种数据更新的操作的优劣,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • mysql数据库中字段的注释和类型长度获取方式

    mysql数据库中字段的注释和类型长度获取方式

    这篇文章主要介绍了mysql数据库中字段的注释和类型长度获取方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • mysql如何查询两个日期之间最大的连续登录天数

    mysql如何查询两个日期之间最大的连续登录天数

    在现在的很多网站中都有这样一个功能。记录用户的连续登陆天数,所谓的连续在线是指相邻两天都登录过,不一定一直在线,但是只要有过登录即可。这篇文章主要介绍的是利用sql语句如何查询在两个日期之间最大的连续登录天数,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • mysql日期函数TO_DAYS()函数的详细讲解

    mysql日期函数TO_DAYS()函数的详细讲解

    在SQL中我们经常需要根据时间字段查询数据,今天用到一个好用的时间字段,用来查询一整天的数据,下面这篇文章主要给大家介绍了关于mysql日期函数TO_DAYS()函数的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论