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

相关推荐
程序员塔塔喵1 小时前
【MySQL篇|第二篇】慢SQL及其优化手段
sql·mysql·慢sql优化
为思念酝酿的痛2 小时前
MySQL数据库基础
数据库·mysql
paopaokaka_luck3 小时前
智慧电玩店管理系统(空闲机台随机分配、游玩时长概率模拟、积分自动结算、积分兑换闭环、 ECharts经营分析、 腾讯地图选址)
java·人工智能·mysql·echarts·推荐算法
*长铗归来*3 小时前
MySQL新学知识(三)MySQL 事件(EVENT)
数据库·mysql
Warolitbos4 小时前
【数据库】SQL进阶15题,窗口函数/索引/事务一页速查
数据库·sql·学习·mysql·面试
从零数据分析5 小时前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database
太理摆烂哥5 小时前
MySQL的查询
数据库·mysql
程序员塔塔喵5 小时前
【MySQL篇|第四篇】事务隔离级别
数据库·mysql·事务隔离级别
时间售卖铺7 小时前
MySQL DML 与 DQL 语句详解
运维·数据库·mysql·云原生
codeejun7 小时前
每日一Go·MySQL-9、索引存储结构|页分裂、页合并、索引高度与磁盘
数据库·mysql