【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已经这样优化,那么在代码层面可以去掉分批查询,基本逻辑都是类似的。

完结撒花~

相关推荐
欢呼的太阳8 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
喜欢的名字被抢了9 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
Elastic 中国社区官方博客10 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
DLYSB_10 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔10 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
观远数据11 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华11 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
哥是强混12 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
ffqws_12 小时前
redis面试:如何保证双写一致
数据库·redis·缓存
水无痕simon13 小时前
6 数据库同义词
数据库