mysql中in和exist区别

  • 如果查询的两不表大小相当,那么用EXISTSIN差别不大。
  • 如果两个表中一个较小,一个是大表,则子查询表大的用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

相关推荐
quan263112 小时前
20260529,日常开发-查老数据全量更新闭坑
java·mysql·主从·主从延迟
java_cj12 小时前
MySQL 8.0 新特性深度解析:降序索引、Doublewrite Buffer 与 redo log 无锁优化
数据库·mysql
网管NO.112 小时前
多表联查入门|INNER JOIN 内连接,关联查询基础(实操案例)
数据库·sql
devilnumber12 小时前
MySQL 索引失效 20 例
数据库·mysql
念恒1230612 小时前
MySQL事务(上)
数据库·mysql
devilnumber12 小时前
MySQL 执行计划(EXPLAIN)背诵版
数据库·mysql
念恒1230612 小时前
MySQL视图
数据库·mysql
骄马之死13 小时前
缓存与数据库一致性的核心方案
mysql·缓存
我叫张小白。13 小时前
基于Redis的缓存架构与一致性保障体系
数据库·redis·缓存·架构
Omics Pro13 小时前
基因泰克:检测级虚拟细胞基准!大语言模型+智能体
大数据·数据库·人工智能·机器学习·语言模型·自然语言处理·r语言