Mysql4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的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不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
相关文章
- 这是一篇纯讲SQL语句优化的文章!!!| 博学谷狂野架构师
- 这是一篇纯讲SQL语句优化的文章!!!| 博学谷狂野架构师
- mysql数据类型以及各种语句的总结
- 「推荐收藏!」【MySQL技术之旅】(5)「主从架构」一直都倾向于优化查询,这次学习一下优化Insert插入语句
- 「推荐收藏!」【MySQL技术之旅】(4)总结和盘点优化方案系列之常用SQL的优化
- 第45期:一条 SQL 语句优化的基本思路
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)
- MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍
- mysql按年度、季度、月度、周、日统计查询的sql语句
- mySQL PreparedStatement与JAVA中的语句[重复]