phpMyAdmin 5.2 必须手动添加 EXPLAIN 前缀,无“分析”按钮;需手写 EXPLAIN SELECT…,子查询/CTE 要包最外层;关键看 key、type、Extra、key_len 组合;JSON 格式须切“文本”模式查看。

phpMyAdmin 5.2 不支持点一下就出执行计划,必须手写 EXPLAIN,且默认表格视图会掩盖关键细节——这是最常被卡住的第一步。
必须手动加 EXPLAIN,不能依赖“分析”按钮
phpMyAdmin 5.2 已彻底移除旧版的“分析”快捷入口。你写好 SELECT * FROM orders WHERE user_id = 123;,再点任何叫“分析”“执行计划”或类似字样的按钮,都不会自动补前缀,也不会报错,只是静默失败。
- 正确做法:把整条语句改成
EXPLAIN SELECT * FROM orders WHERE user_id = 123;,再点击“执行” - 错误做法:先执行普通查询,再回头找按钮——找不到,也起不了作用
- 如果语句里已经含
EXPLAIN(比如你复制了别人带前缀的语句),重复加会导致语法错误:You have an error in your SQL syntax - 带子查询或 CTE 的语句,
EXPLAIN必须包在最外层:EXPLAIN WITH tmp AS (SELECT id FROM logs) SELECT * FROM tmp;
重点盯哪几列?别只看 rows 和 type
rows 值小不代表快,type 是 ALL 也不一定糟——得结合上下文读组合信号:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
-
key为NULL但Extra含Using index→ 走了覆盖索引,实际没问题 -
type是ALL,但表总共才 42 行 → 扫全表开销可忽略 -
Extra出现Using filesort或Using temporary→ 排序或分组没走索引,必须优化 - 联合索引是否生效?先看
key_len是否匹配最左前缀长度(比如索引是(a,b,c),key_len=767对应a的前缀长度),再核对WHERE条件顺序是否满足最左匹配
想看 JSON 格式?必须切到“文本”模式
EXPLAIN FORMAT=JSON 在 phpMyAdmin 5.2 是支持的,但默认表格视图完全无法解析嵌套结构——JSON 会被截断、换行丢失、中文变乱码。
立即学习“PHP免费学习笔记(深入)”;
- 写法:
EXPLAIN FORMAT=JSON SELECT * FROM users WHERE created_at > '2024-01-01'; - 执行后,点结果区右上角的 “文本”标签(不是“表格”),才能看到完整 JSON
- 若中文显示为
,临时把 phpMyAdmin 字符集设为utf8(非utf8mb4)再查 - JSON 更适合复制到外部工具(如 MariaDB EXPLAIN Visualizer)做节点展开;表格里根本看不全驱动表顺序、物化子查询等深层信息
虽然没图形化,但能快速验证两类高频问题
没有流程图不等于没用——EXPLAIN 表格本身就能直接定位关键瓶颈:
- 查分区表时,用
EXPLAIN PARTITIONS,看partitions列是否只列出你目标的那个分区名(如p202401),否则说明扫描了全部分区 - 多表
JOIN时,id列数值顺序就是实际驱动表顺序;id相同表示同一级嵌套,数值变大说明是被驱动表;如果type是const却出现在id=3行,说明连接顺序不合理,可能需要加STRAIGHT_JOIN - 真正难的不是单个字段含义,而是把
key_len、ref、Extra这几项串起来读——比如key_len=767且ref=const,说明用了前缀索引,但没用全,WHERE 条件可能只用了索引第一列


















