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

相关推荐
我科绝伦(Huanhuan Zhou)1 天前
【生产案例】MySQL InnoDB 数据损坏崩溃修复
数据库·mysql·adb
猹叉叉(学习版)1 天前
【系统分析师_知识点整理】 3.数据库系统
数据库·笔记·软考·系统分析师
6+h1 天前
【Redis】高可用核心讲解
数据库·redis·缓存
海棠蚀omo1 天前
从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
数据库·mysql
鸽芷咕1 天前
告别迁移焦虑:KingbaseES如何搞定Oracle复杂的层次查询与伪列?
数据库·oracle
当代红领巾1 天前
Oracle 中的物理备份
数据库·oracle
廋到被风吹走1 天前
【MySql】超时问题分析
java·数据库·mysql
y = xⁿ1 天前
重生之我创作出了小红书:对象存储模块,用户资料模块
后端·mysql·intellij-idea
Y001112361 天前
Day10-MySQL-事物
数据库·sql·mysql