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那种一直匹配的机制

相关推荐
隔窗听雨眠11 小时前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
Decay__12 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
星恒随风17 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
隔窗听雨眠20 小时前
MySQL进程卡死的定位思路与恢复实践
mysql·故障排查·数据库运维
为思念酝酿的痛21 小时前
C语言操作MySQL
数据库·mysql
星恒随风1 天前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
爱码少年1 天前
Springboot下如何将CSV文件数据导入H2、Mysql数据库表
数据库·mysql·csv
2603_969694851 天前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
ClouGence2 天前
最基础的异构数据库 DDL 同步,我们踩过哪些坑?
数据库·mysql·postgresql
小呆爱发呆2 天前
第三章 MySQL 库表操作
数据库·mysql·adb