首页/数据/数据库速查/optimizer trace 查看优化器决策
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

optimizer trace 查看优化器决策

为什么没走索引?optimizer trace 输出优化器逐步决策(候选索引、代价比较、被否决原因),是「计划为什么这样」的终极窗口。

数据库速查数据更新于 2026-10-12

启用与分析

启用与分析
SET optimizer_trace = 'enabled=on';
SELECT * FROM appdb.orders WHERE user_id = 1 AND status = 2 LIMIT 10;
SELECT TRACE FROM information_schema.OPTIMIZER_TRACE\G
SET optimizer_trace = 'enabled=off';
-- 输出重点看:considered_execution_plans / best_plan_so_far / rejected
适用EXPLAIN 看不出原因时
体积TRACE 字段很长,用 \G 或导出后 grep
开销只影响当前会话的语句,用完关闭
trace 里的 rows_estimation 与 cost 数字是理解「估算侧」为何选错的关键。

易错点

  • 忘了关 trace:会话持续收集,长连接上内存与开销累积
  • 直接改 SQL 好几天看不出原因:trace 十分钟能省下这个时间

数据来源与参考

  • MySQL 8.0 Reference Manual: Optimizer Trace

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌