EXPLAIN
查看查询执行计划
简介
EXPLAIN 展示优化器计划如何访问表、选择索引、连接和排序,但普通 EXPLAIN 不会证明真实耗时。阅读时先确认访问类型、使用的键、预计行数和额外操作,再用接近生产的数据分布复测;计划变化也不自动等于性能改善。
基础语法
EXPLAIN SELECT * FROM orders WHERE department = 'Sales';
示例
EXPLAIN 示例
示例查看 department 条件的访问计划;页面结果是便于学习的摘要,实际判断必须读取目标 MySQL 的原生 EXPLAIN。
示例数据表
表名:
orders| id | customer_id | product_id | name | department | amount | status | created_at | discount |
|---|---|---|---|---|---|---|---|---|
| 1 | 101 | 201 | Alice | Sales | 1200 | paid | 2026-01-03 | 0 |
| 2 | 102 | 202 | Bob | IT | 900 | pending | 2026-01-08 | 50 |
| 3 | 101 | 201 | Cindy | Sales | 1500 | paid | 2026-02-02 | 100 |
| 4 | 104 | 203 | David | HR | 700 | cancelled | 2026-02-15 | 0 |
运行结果
| 步骤 | 对象 | 访问方式 | 说明 | 注意事项 |
|---|---|---|---|---|
| 1 | orders | 顺序扫描 | 顺序读取 orders 并应用查询条件。 | 下表是帮助理解访问方式的概念摘要,不是 MySQL EXPLAIN 的原始列;索引选择、成本和预计行数应以目标 MySQL 环境的实际计划为准。 |
常见问题
EXPLAIN 会真正执行查询吗?
普通 EXPLAIN 通常只生成计划;EXPLAIN ANALYZE 会实际执行并收集运行数据,不能对写入语句或高成本查询随意使用。
阅读执行计划先看哪些信息?
先看访问类型、预计扫描行数、使用的索引、连接顺序以及是否出现临时表或额外排序。
执行计划变好是否就证明查询更快?
不能。估算计划只是线索;应在接近生产的数据量上比较实际耗时、读取行数与结果一致性。
标签
这篇内容是否清楚?
感谢反馈,我们会把它用于后续内容复核。