mysql中in和exist区别

  • 如果查询的两不表大小相当,那么用EXISTS和IN差别不大。
  • 如果两个表中一个较小,一个是大表,则子查询表大的用EXISTS,子查询表小的用 IN
IN 的执行流程:

SELECT * FROM A WHERE id IN (SELECT id FROM B)

  1. 执行子查询:SELECT id FROM B → 得到结果集 R

  2. 将结果集 R 物化(临时表)

  3. 对主表 A 进行全表扫描

  4. 对每行检查 id 是否在临时表 R 中

EXISTS 的执行流程:

SELECT * FROM A WHERE EXISTS (SELECT 1 FROM B WHERE B.id = A.id)

  1. 遍历主表 A 的每一行

  2. 对于每一行,执行子查询: SELECT 1 FROM B WHERE B.id = A.id

  3. 如果子查询返回至少一行,则保留该行

https://zhuanlan.zhihu.com/p/680915665

相关推荐
小科先生12 分钟前
Java springboot调用数据库的基本流程
java·数据库·spring boot
星恒随风16 分钟前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql
Pniubi2 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql
数据库小学妹3 小时前
pgbouncer 事务池:prepared statement、临时表与会话状态
数据库·后端·postgresql
aiks_yuan3 小时前
MySQL 死锁怎么排查:看懂 INNODB STATUS 死锁日志,先查后插为什么必死锁(MySQL 8.2 实测)
mysql
Lucifer三思而后行4 小时前
最近折腾了一下金仓数据库的备份恢复
数据库·备份恢复
草莓熊Lotso5 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
进击的荆棘6 小时前
MySQL——库的操作
数据库·mysql
2601_967980116 小时前
“小程序·云开发”上线 助力开发者的高效利器
数据库·存储管理·小程序云开发·云函数·开发者工具
zhangjw346 小时前
1-9 SELECT 查询基础:where、group by、having、order by、limit offset
数据库·postgresql·pg数据库