【MYSQL】IN查询优化

总结:

在 MySQL 5.7 中,如果 WHERE 只作用于主表,但 JOIN 和 ORDER BY 很重,

就应当显式地缩小驱动表;

在 MySQL 8.0 中,优化器可能自动完成,但不能盲目信任。

问题描述:

sql 复制代码
//优化前
select * from 

a 

left join b on b.b=a.b left join... where a.id in (1,2...) order by d.number;
//优化后
select * from 

(select * from a where a.id in (1,2,3...)) t

left join b ... order by d.number;

在 MySQL 8.0 中,优化器相比 5.7 有几项关键增强:

1.更积极的 WHERE 条件下推(Predicate Pushdown)

2.更智能的 JOIN 顺序重排

3.派生表(子查询)可被自动合并(Derived Merge)

4.更成熟的 Cost-Based Optimizer

👉 MySQL 8.0 很可能自动把过滤提前到 JOIN 之前
但要强调的边界条件(很重要) ,以下情况 8.0 也未必能完全自动优化:

1.JOIN 结构极其复杂(多层 LEFT JOIN)

2.WHERE 中混入了 b / c 的条件

3.ORDER BY / GROUP BY 过于复杂

4.存在函数、隐式类型转换

5.统计信息不准确

最后 如果sql已经这样优化,那么在代码层面可以去掉分批查询,基本逻辑都是类似的。

完结撒花~

相关推荐
herinspace6 小时前
管家婆实用帖-如何使用ping命令检测网络环境
网络·数据库·人工智能·学习·excel·语音识别
星空椰6 小时前
Windows 安装 PostgreSQL 数据库
数据库·postgresql
Elastic 中国社区官方博客6 小时前
用于 IntelliJ IDEA 的新 ES|QL 插件
java·大数据·数据库·ide·elasticsearch·搜索引擎·intellij-idea
疯狂成瘾者6 小时前
LangChain Middleware 技术解析:从“插槽机制”到 Agent 运行时控制
数据库·python·langchain
七夜zippoe6 小时前
OpenClaw 飞书深度集成:多维表格
数据库·算法·飞书·集成·openclaw
A-刘晨阳6 小时前
当数据学会“秒回“:工业4.0时代的实时计算革命
开发语言·数据库·perl
2201_756847336 小时前
如何设置备库只接日志不应用_暂停MRP且维持网络传输的方法
jvm·数据库·python
Bohemian—Rhapsody6 小时前
银河麒麟(ky10.aarch64)操作系统安装部署mysql5.7.26
mysql·arm
tian_jiangnan7 小时前
flink mysql集群增删改查
大数据·mysql·flink
dualven_in_csdn7 小时前
EMQX 开启 **MySQL + password_based** 认证
android·数据库·mysql