in子查询的执行可能被优化为连接查询

in子查询的SQL,正常情况执行计划会有两行两个id,来代表有两个Select查询

可是优化器在优化之后,可能会将子查询优化成连接查询,下面看看这种情况(有很多种情况我只举例这种):

先建表,这里我建好了:

执行SQL:

复制代码
mysql> EXPLAIN
    -> SELECT *
    -> FROM user u
    -> WHERE u.id IN (
    ->     SELECT r.user_id
    ->     FROM recharge r
    ->     WHERE r.user_id = 1
    -> );

执行结果:

说明它真的被优化成了连接查询,而且是firstMatch的半连接查询匹配,也就是类似于Exists的算法存在即命中,而不是像in那种一直匹配的机制

相关推荐
写后端的胖头鱼6 小时前
【高频面试题】深分页问题
数据库·mysql·数据库优化·深分页
2601_962387829 小时前
多源数据查询指南:MySQL 联邦、Python 聚合与 Presto 引擎全对比
python·mysql·数据集成·presto·联邦查询
她说..9 小时前
MySQL JSON 处理学习文档
学习·mysql·json
写后端的胖头鱼10 小时前
【高频面试题】SQL 查询慢怎么排查
数据库·sql·mysql·oracle·慢查询·高频面试题
扬大平仔10 小时前
# 小深:用 AgentScope Java 2.0 Harness 做私人助手(上)mysql
java·开发语言·mysql
wudongfang66611 小时前
mysql全量同步数据改增量
数据库·mysql
garmin Chen11 小时前
MySQL精简面试题
数据库·后端·mysql·面试
服务端相声演员12 小时前
MySQL的select distinct ..Union all和select..union的区别
数据库·mysql
2501_9304724412 小时前
深度复盘|数据库迁移实战(下):从自建 MySQL 5.7 到腾讯云 MySQL 8.0 的 SQL 兼容改造
数据库·mysql·腾讯云