in 和exists的区别

inexists在大多数时候都是可以互相转化的,我们可以把带有insql语句转为existssql语句。那么,他们二者有什么区别?我们什么时候使用in,什么时候使用exists

1. in

1.1 语法

SELECT column1 FROM table1 WHERE column1 IN (SELECT column2 FROM table2);

1.2 执行步骤

MySQL 会先执行子查询并将结果存储在内存中,然后对外部查询的每一行进行比较。这在子查询结果较大时可能导致性能问题。也就是,子查询驱动主查询

2. exists

2.1 语法

SELECT column1 FROM table1 WHERE EXISTS (SELECT 1 FROM table2 WHERE table2.column2 = table1.column1);

2.2 执行步骤

MySQL 会对主查询的每一行执行子查询,一旦子查询返回结果,就会立即停止执行并返回 TRUE。这在许多情况下比 IN 更高效。主查询驱动子查询

3. 总结

根据优化原则"小表驱动大表,即小的数据集驱动大的数据集",我们可以得知:

使用 IN

  • 当子查询返回较少结果。
  • 当要检查的值列表较小或是一个静态列表。

使用 EXISTS

  • 当子查询结果较大。
  • 当子查询涉及复杂条件。
  • 通常在存在关联的子查询中更高效。
相关推荐
亭台烟雨中2 小时前
SQL优化简单思路
数据库·sql
在路上`2 小时前
前端学习之后端java小白(二)-sql约束/建表
java·sql·学习
F_D_Z12 小时前
【SQL】指定日期的产品价格
数据库·sql·mysql
麦聪聊数据13 小时前
如何使用 QuickAPI 快速连接 MySQL 数据库并发布 RESTful API
数据库·sql·mysql·restful·数据服务
数巨小码人18 小时前
Oracle SQL调优技巧实战指南
数据库·sql·oracle
无名客019 小时前
SQL语句执行时间太慢,有什么优化措施?以及衍生的相关问题
java·数据库·sql·sql语句优化
咋吃都不胖lyh20 小时前
SQL数据分析原代码--创建表与简单查询
java·数据库·sql
武昌库里写JAVA21 小时前
Java设计模式中的几种常用设计模式
vue.js·spring boot·sql·layui·课程设计
Yvonne爱编码21 小时前
后端编程开发路径:从入门到精通的系统性探索
java·前端·后端·python·sql·go
XueminXu1 天前
Spark-SQL任务提交方式
sql·spark·spark-sql·sql文件·元数据·sql脚本·hms