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

  • 当子查询结果较大。
  • 当子查询涉及复杂条件。
  • 通常在存在关联的子查询中更高效。
相关推荐
网管NO.14 小时前
SQL 日期函数全套精讲!时间格式化、日期加减、年月日提取,做日报周报直接套用
数据库·sql
一拳一个娘娘腔11 小时前
【SRC漏洞挖掘系列】第03期:SQL注入——从“拖库”到“掌舵”的终极奥义
数据库·sql·安全
青春万岁!!11 小时前
hiveSQL脚本性能优化-减少表扫描
大数据·hive·sql
x***r15112 小时前
heidisql数据库客户端使用步骤详解(附HeidiSQL连接MySQL与SQL执行教程)
数据库·sql·mysql
白雪落青衣14 小时前
BUU SQL COURSE 1 sql注入
数据库·sql·web安全·网络安全
fengxin_rou16 小时前
【MySQL SQL 执行全链路剖析】:执行计划、慢查询与经典场景优化指南
数据库·sql·mysql
电魂泡哥1 天前
SQL出现filesort 一定慢吗
数据库·sql
muddjsv1 天前
SQL 最常用技能详解与实战示例
数据库·sql·mysql
这个DBA有点耶1 天前
数据迁移避坑指南:从Oracle到国产数据库的兼容性问题
数据库·数据仓库·sql·oracle·dba
zgscwxd1 天前
MySQL 远程访问并结合花生壳实现外网穿透
sql