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

相关推荐
Davina_yu几秒前
1、count(*)、count(1) 和 count(单个字段) 的区别
数据库
锦衣夜行?1 分钟前
Oracle 数据库安装失败清理残留步骤
数据库·oracle
时间售卖铺14 分钟前
MySQL 表的约束
运维·数据库·mysql·云原生
一条泥憨鱼19 分钟前
【Redis | 黑马点评】基于Redis的消息队列 | stream消息队列 源码解读
java·数据库·redis·缓存·lua
CodeGL20 分钟前
9、Python基础之IO编程
开发语言·数据库·python
每天一道题21 分钟前
Redis 缓存为什么会出问题?穿透、击穿、雪崩与缓存一致性
数据库·redis·缓存
tongyiixiaohuang44 分钟前
物料成本核算单同步返回信息策略实战教程:从金蝶云星空回写 MySQL 的闭环设计
数据库·mysql
星云低代码开发平台1 小时前
AI 工作台记录删除与业务审计留存:三层数据边界设计
数据库·人工智能·架构
深度学习04071 小时前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
code_slave(码畜)1 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表