mysql 8.0 性能下降主因是优化器因统计信息陈旧、optimizer_switch默认变更及sort_buffer_size在新排序模型下易溢出,导致执行计划劣化。

不是 MySQL 8.0 更慢,而是升级后优化器“重新认识数据”时踩了坑——统计信息陈旧、optimizer_switch默认值变了、sort_buffer_size在新排序模型下更容易溢出,三者叠加导致执行计划劣化。
EXPLAIN 显示 rows 暴涨或 type 从 ref 变成 ALL 怎么办
这是最直接的信号:优化器误判了索引选择性,根源是 INNODB_TABLESTATS.last_update 还卡在升级前。
- 查表统计更新时间:
SELECT last_update FROM INFORMATION_SCHEMA.INNODB_TABLESTATS WHERE TABLE_NAME = 'your_table',若早于升级时间,必须手动刷新 - 别等
innodb_stats_auto_recalc=ON——它只对单次变更超 10% 行数的表触发,冷表/配置表永远不动 - 执行
ANALYZE TABLE your_table WITH SYNC(加WITH SYNC避免后台异步延迟) - 验证基数是否失真:
SHOW INDEX FROM your_table中的Cardinality值,对比SELECT COUNT(DISTINCT your_col) FROM your_table,差 10 倍以上就确认失效
ORDER BY 突然变慢且 EXPLAIN 出现 Using filesort
MySQL 8.0 废弃了 max_length_for_sort_data,改用全字段内存排序模型,sort_buffer_size 不够就立刻写磁盘临时文件。
智能模型自动切换 V5.0.2 - 多模态感知,自动识别图片/视频/音频/代码/文本任务,切换最优模型。支持图片理解(qwen3-vl-plus)、视频音频(qwen3.5-plus)、代码(glm-5)、Office文档(MiniMax-M2.5)、推理等场景。零感知切换,无需手动操作。
- 检查是否真正走索引排序:
EXPLAIN输出中Extra列不含Using filesort才算有效 - 临时修复:给
WHERE + ORDER BY字段建复合索引,例如WHERE a=1 ORDER BY b,c就建INDEX(a,b,c) - 避免
SELECT *加剧恶化——字段越多,filesort内存压力越大;先试SELECT a,b,c看是否恢复毫秒级 -
sort_buffer_size是 per-connection 分配的,设太大易引发内存爆炸;建议从512K起调,结合EXPLAIN ANALYZE观察实际排序内存使用
FORCE INDEX 失效且出现 using_index_merge
MySQL 8.0.19+ 默认开启 index_merge=on,优化器会无视你的 FORCE INDEX,转而合并多个单列索引。
- 确认是否触发:
EXPLAIN FORMAT=TREE或EXPLAIN ANALYZE输出里搜using_index_merge - 临时绕过:
IGNORE INDEX (idx_a, idx_b)把它想合并的单列索引全禁掉 - 根本解法:删掉冗余单列索引——比如已有
(a,b)复合索引,就别留(a)或(b)单列索引,减少优化器的“错误联想” - 检查当前开关:
SELECT @@optimizer_switch\G,针对性关闭测试:SET SESSION optimizer_switch='index_merge=off'
子查询变成 DEPENDENT SUBQUERY 且执行缓慢
5.7 中子查询反复执行是常态,8.0 支持物化但不自动启用;升级后没改写 SQL 或加提示,反而因执行路径变化更慢。
-
DEPENDENT SUBQUERY出现在EXPLAIN里,基本说明子查询没被物化 - 强制物化需显式加提示:
/*+ MATERIALIZE */,否则优化器可能继续嵌套循环 - 验证是否真生效:唯一依据是
EXPLAIN FORMAT=TREE输出里有没有materialize节点,以及物化后rows估算是否合理 - SELECT 列表里的标量子查询(如
SELECT (SELECT name FROM users WHERE id = o.user_id))仍不会自动物化,必须手动改写为LATERAL或派生表
最容易被忽略的是:8.0 的“默认值”不是静态快照,而是动态适配结果;persisted_variables 优先级高于 my.cnf,哪怕你改了配置文件,也可能被 mysqld-auto.cnf 里的旧值覆盖。










