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

相关推荐
l1t2 小时前
duckdb数据库CROSS JOIN LATERAL 中使用 EXISTS子查询的一个bug
数据库·bug
wregjru2 小时前
【C++】2.10智能指针详解
数据库·redis·mysql
2401_858286112 小时前
从Redis 8.4.0源码看快速排序(1) 宏函数min和swapcode
c语言·数据库·redis·缓存·快速排序·宏函数
茁壮成长的露露2 小时前
MongoDB单机安装
数据库·mongodb
qq_406176142 小时前
JS防抖与节流:从原理到实战的性能优化方案
服务器·数据库·php
a***59262 小时前
MySQL数据可视化实战指南
数据库·mysql·信息可视化
Maggie_ssss_supp2 小时前
LINUX-MySQL多表查询
数据库·mysql
lxp1997413 小时前
Mysql短课题全手稿
数据库·mysql
我是一只小青蛙8883 小时前
Python实战:Kingbase数据库高效操作指南
数据库·oracle