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 自动备份与数据库被破坏后的恢复方法

    MySQL 自动备份与数据库被破坏后的恢复方法

    当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小。
    2010-03-03
  • MySQL 数据类型和建库策略

    MySQL 数据类型和建库策略

    无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。
    2008-12-12
  • MySQL 中查找含有目标字段的表的方法

    MySQL 中查找含有目标字段的表的方法

    这篇文章主要介绍了MySQL 中查找含有目标字段的表的方法,即查找某个字段在哪个表中,这在一些场景中非常有用,需要的朋友可以参考下
    2015-06-06
  • asp+mysql+utf8 网页出现乱码问题的解决方法

    asp+mysql+utf8 网页出现乱码问题的解决方法

    无论在网页中加多少UTF8的定义,显示的结果都还是会有一些小格子,反而定义为gb2312,显示完全正常
    2014-03-03
  • MySQL8.0.21安装步骤及出现问题解决方案

    MySQL8.0.21安装步骤及出现问题解决方案

    这篇文章主要介绍了MySQL8.0.21安装步骤及出现问题解决方案,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Ubuntu下MySQL安装及配置远程登录教程

    Ubuntu下MySQL安装及配置远程登录教程

    这篇文章主要为大家详细介绍了Ubuntu下MySQL安装及配置远程登录教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • MySQL 覆盖索引的优点

    MySQL 覆盖索引的优点

    当索引包含了所有查询的数据时,这个索引就称之为覆盖索引。覆盖索引能够成为一个非常有力的工具并且能够显著改善性能,本文将具体讲述覆盖索引的优点
    2021-05-05
  • MySQL索引原理详解

    MySQL索引原理详解

    这篇文章主要介绍了MySQL索引原理详解,索引是帮助MySQL高效获取数据的排好序的数据结构,最重要的点是有序的,我们用索引就是为了快速的查找数据,如果一堆数据是无序的,程序只能挨个遍历每个元素
    2022-08-08
  • MySQL约束攻击的原理和复现方式

    MySQL约束攻击的原理和复现方式

    这篇文章主要介绍了MySQL约束攻击的原理和复现方式,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • mysql中between的用法及说明

    mysql中between的用法及说明

    这篇文章主要介绍了mysql中between的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论