首页/数据/数据库速查/EXPLAIN ANALYZE 实测执行
性能与调优57 条

EXPLAIN ANALYZE 实测执行

8.0.18+ 的 EXPLAIN ANALYZE 真正执行查询并回传每步实际行数与耗时(TREE 格式):估算与实测的差距一眼可见,会写库的语句慎用。

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

实测执行是什么

实测执行分析是较新版本提供的执行计划工具:它真正把语句跑一遍,并逐步给出实际行数与耗时,让估算和实测的差距一目了然。相比只看估算行数,它能直接指出瓶颈落在哪一步、哪个循环次数最多。代价同样明确——语句会被真实执行,对修改数据的语句用之前必须套上事务或改写成查询。

基本信息

用途实测各步骤的真实行数与耗时
输出内容每步的实际耗时、实际行数、循环次数
对比价值估算行数与实际行数的偏差
版本要求较新版本提供
使用代价语句被真实执行,写操作存在数据变更风险
判读重点循环次数乘以实际行数才是真实处理量

典型使用场景

  • 估算与实际差距大时,确认真实行数
  • 复杂连接查询:定位哪一步耗时最多
  • 优化前后对比:确认改动确实降低了处理量
  • 排查计划看着正常但依然很慢的语句
  • 评估循环次数带来的放大效应

用法与解读

用法与解读
EXPLAIN ANALYZE   # 真正执行语句并逐步输出实测数据
SELECT o.id, o.amount FROM appdb.orders o
WHERE o.user_id = 12345 ORDER BY o.created_at DESC LIMIT 20;
# 输出里关注实际耗时、实际行数与循环次数
# 循环次数乘以实际行数才是该步骤真正处理的数据量

输出要点

项目含义判读
实际耗时该步骤实际花费时间找出耗时占比最高的步骤
实际行数每次循环返回的行数与估算对比看偏差大小
循环次数该步骤被执行的次数次数多的步骤才是放大源
估算行数优化器预估的行数偏差大说明统计信息可能过期
处理总量循环次数乘以实际行数这才是真实成本
总耗时语句整体执行时间作为优化前后的对比基线
对修改数据的语句使用实测分析会真实变更数据:用前先套事务或把语句改写成等价查询,避免在生产上造成不可逆修改。
不要只看总时长而忽略循环次数:循环上千次的小步骤才是真正的放大来源,这类问题加索引或改写法往往立竿见影。

实测分析检查清单

  • 确认语句类型,写操作先改写成查询或套事务
  • 选择低峰期或从库执行,避免影响生产
  • 记录优化前的实测数据作为对比基线
  • 关注循环次数与实际行数的乘积
  • 实测完成后核对统计信息是否新鲜
实测结果会受缓存与并发影响:同一语句在不同时间执行可能得到不同耗时,判断优化效果时至少执行两次并与基线对比,避免被单次波动误导。

易错点

  • 拿实测分析测线上大查询:语句被完整执行把生产实例拖慢,应选低峰期或影子环境
  • 只看总时长不看循环次数:循环多次的小步骤才是放大来源,优化方向容易被带偏
  • 对写语句直接实测:数据被真实修改,没有事务保护时无法回滚
  • 不做前后对比:无法证明优化有效,也无法判断是否引入了新的代价

数据来源与参考

  • MySQL 8.0 Reference Manual: EXPLAIN ANALYZE

相关工具

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