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

相关推荐
fen_fen7 小时前
Oracle建表语句示例
数据库·oracle
砚边数影8 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt9 小时前
Djiango配置Celery
数据库·sqlite
云小逸9 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
·云扬·9 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
肉包_5119 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总10 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
此刻你11 小时前
常用的 SQL 语句
数据库·sql·oracle
それども11 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·11 小时前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb