实测执行是什么
实测执行分析是较新版本提供的执行计划工具:它真正把语句跑一遍,并逐步给出实际行数与耗时,让估算和实测的差距一目了然。相比只看估算行数,它能直接指出瓶颈落在哪一步、哪个循环次数最多。代价同样明确——语句会被真实执行,对修改数据的语句用之前必须套上事务或改写成查询。
基本信息
| 用途 | 实测各步骤的真实行数与耗时 |
|---|---|
| 输出内容 | 每步的实际耗时、实际行数、循环次数 |
| 对比价值 | 估算行数与实际行数的偏差 |
| 版本要求 | 较新版本提供 |
| 使用代价 | 语句被真实执行,写操作存在数据变更风险 |
| 判读重点 | 循环次数乘以实际行数才是真实处理量 |
典型使用场景
- 估算与实际差距大时,确认真实行数
- 复杂连接查询:定位哪一步耗时最多
- 优化前后对比:确认改动确实降低了处理量
- 排查计划看着正常但依然很慢的语句
- 评估循环次数带来的放大效应
用法与解读
用法与解读
EXPLAIN ANALYZE # 真正执行语句并逐步输出实测数据
SELECT o.id, o.amount FROM appdb.orders o
WHERE o.user_id = 12345 ORDER BY o.created_at DESC LIMIT 20;
# 输出里关注实际耗时、实际行数与循环次数
# 循环次数乘以实际行数才是该步骤真正处理的数据量输出要点
| 项目 | 含义 | 判读 |
|---|---|---|
| 实际耗时 | 该步骤实际花费时间 | 找出耗时占比最高的步骤 |
| 实际行数 | 每次循环返回的行数 | 与估算对比看偏差大小 |
| 循环次数 | 该步骤被执行的次数 | 次数多的步骤才是放大源 |
| 估算行数 | 优化器预估的行数 | 偏差大说明统计信息可能过期 |
| 处理总量 | 循环次数乘以实际行数 | 这才是真实成本 |
| 总耗时 | 语句整体执行时间 | 作为优化前后的对比基线 |
对修改数据的语句使用实测分析会真实变更数据:用前先套事务或把语句改写成等价查询,避免在生产上造成不可逆修改。
不要只看总时长而忽略循环次数:循环上千次的小步骤才是真正的放大来源,这类问题加索引或改写法往往立竿见影。
实测分析检查清单
- 确认语句类型,写操作先改写成查询或套事务
- 选择低峰期或从库执行,避免影响生产
- 记录优化前的实测数据作为对比基线
- 关注循环次数与实际行数的乘积
- 实测完成后核对统计信息是否新鲜
实测结果会受缓存与并发影响:同一语句在不同时间执行可能得到不同耗时,判断优化效果时至少执行两次并与基线对比,避免被单次波动误导。