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

  • 当子查询结果较大。
  • 当子查询涉及复杂条件。
  • 通常在存在关联的子查询中更高效。
相关推荐
刘 大 望5 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
cookqq7 小时前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
斯特凡今天也很帅8 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
海尔辛13 小时前
SQL 基础入门
数据库·sql
噼里啪啦啦.16 小时前
Spring事务和事务传播机制
数据库·sql·spring
李少兄16 小时前
解决 idea提示`SQL dialect is not configured` 问题
java·sql·intellij-idea
珹洺17 小时前
数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
java·数据库·sql·安全·oracle
我科绝伦(Huanhuan Zhou)1 天前
深入解析Oracle SQL调优健康检查工具(SQLHC):从原理到实战优化
数据库·sql·oracle
神奇侠20241 天前
Hive SQL常见操作
hive·hadoop·sql
一只叫煤球的猫1 天前
MySQL 8.0 SQL优化黑科技,面试官都不一定知道!
后端·sql·mysql