in 和exists的区别

in和exists在大多数时候都是可以互相转化的,我们可以把带有in的sql语句转为exists的sql语句。那么,他们二者有什么区别?我们什么时候使用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:

  • 当子查询结果较大。
  • 当子查询涉及复杂条件。
  • 通常在存在关联的子查询中更高效。
相关推荐
m0_646429971 分钟前
MySQL 初始化 SQL 中文乱码问题总结
数据库·sql·mysql
实战派K8S&DB5 分钟前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql
冰暮流星3 小时前
sql之计算
数据库·sql
imDwAaY11 小时前
一条 SQL 发出去之后,MySQL 到底做了什么?
sql·mysql
刘胡子大叔1 天前
SQL 脚本的导入顺序
数据库·sql
lvqinglou1 天前
学习Sql-part1 for婷姐
sql·学习·性能优化
冰暮流星1 天前
sql之is not null运算符
数据库·sql·oracle
冰暮流星1 天前
sql之is null 运算符
java·数据库·sql
2601_962966641 天前
数学与应用数学专业准备风险管理岗,2027届秋招金融知识和工具技能怎么补?
python·sql