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

  • 当子查询结果较大。
  • 当子查询涉及复杂条件。
  • 通常在存在关联的子查询中更高效。
相关推荐
小徐敲java3 小时前
踩坑实录:MySQL8.0 导入SQL报错 2006 - MySQL server has gone away 完美解决
数据库·sql
Carsene7 小时前
第一章:为什么我们需要“类型安全”的 SQL DSL 框架?
java·sql
德彪稳坐倒骑驴9 小时前
SQL连续登录问题
服务器·数据库·sql
葡萄城技术团队9 小时前
告别臃肿 SQL:HR 系统如何实现“字段级”权限控制与动态脱敏方案?
数据库·sql
SQL必知必会9 小时前
SQL HAVING 是什么?一篇讲清 WHERE 和 HAVING 的区别
数据库·sql
hhb_61812 小时前
SQL高性能查询优化与复杂场景实战指南
服务器·数据库·sql
SQL必知必会13 小时前
SQL 数据分析入门:如何把业务问题翻译成 SQL 查询
大数据·sql·数据分析
旺仔小拳头..13 小时前
JDBC 基础: API、SQL 注入问题,事务、连接池
数据库·sql
SQL必知必会14 小时前
SQL 入门:第一条查询怎么写?从 SELECT、WHERE 到 GROUP BY 讲清楚
数据库·sql
木易 士心14 小时前
云数据库 Clouder 认证:SQL 基础开发与应用题型分析
数据库·后端·sql·oracle