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

  • 当子查询结果较大。
  • 当子查询涉及复杂条件。
  • 通常在存在关联的子查询中更高效。
相关推荐
尽兴-30 分钟前
SQL 执行失败如何回滚?事务已提交还能恢复吗?——MySQL 误操作数据恢复全指南
sql·mysql·binlog·undolog·redolog
二哈喇子!2 小时前
MySQL数据库操作命令【SQL语言】
数据库·sql·视图与索引
施嘉伟2 小时前
Oracle SQL Profile 固化执行计划实战说明
数据库·sql·oracle
TttHhhYy2 小时前
小记,antd design vue的下拉选择框,选项部分不跟着滑动走,固定在屏幕某个部位,来改
前端·vue.js·sql
程序 代码狂人3 小时前
SQL-速查表:NULL 相关函数对比
数据库·sql
JH30734 小时前
我的笔记:怎么用 MySQL 的 EXPLAIN 来分析 SQL
笔记·sql·mysql
7ioik4 小时前
RC和RR隔离级别下MVCC的差异?
数据库·sql·mysql
施嘉伟4 小时前
Oracle 10046 Trace 硬核指南:SQL 慢在哪,从底层拉出来
数据库·sql·oracle
山峰哥5 小时前
数据库工程与SQL调优实战:从原理到案例的深度解析
java·数据库·sql·oracle·性能优化·编辑器
施嘉伟5 小时前
一次典型的 SQL 性能问题排查:临时表导致的隐藏性能陷阱
数据库·sql