讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql如何查看SQL语句的实际执行计划_EXPLAIN关键字参数解析

轻墨同学_9825

轻墨同学_9825

发布时间:2026-05-05 16:22:06

|

236人浏览过

|

来源于php中文网

原创

EXPLAIN展示的是MySQL优化器重排后的执行逻辑,而非SQL文本顺序;id相同按上下顺序执行,id越大越先执行;type列(如const、ref、ALL)直接决定I/O性能,Extra和SHOW WARNINGS则揭示优化器真实改写行为与潜在瓶颈。

mysql如何查看sql语句的实际执行计划_explain关键字参数解析

直接说结论:用 EXPLAIN 看执行计划,不是“看SQL怎么写”,而是看MySQL优化器最终决定怎么查——它可能重排表顺序、改写子查询、跳过某些条件,甚至把 IN 拆成多个等值判断。

为什么 EXPLAIN 返回的不是你写的 SQL 顺序?

MySQL优化器会基于统计信息(如索引基数、行数估算)重排执行顺序,EXPLAIN 显示的就是这个重排后的逻辑。比如你写 SELECT * FROM a JOIN b ON a.id = b.a_id JOIN c ON b.id = c.b_id,但 EXPLAIN 中 table 列的顺序可能是 c、b、a——说明优化器认为先查 c 效率更高。

  • id 相同:按 EXPLAIN 输出的上下顺序执行(非 SQL 文本顺序)
  • id 不同:数值越大越先执行(注意不是“越小越先”)
  • 如果出现 derived 或 union result,对应行的 id 为 NULL,表示这是中间结果,不参与主流程扫描

type 列决定 80% 的性能差异

type 是最该盯紧的一列,它反映单表访问方式,直接关联 I/O 成本。从快到慢依次是:system ≈ const eq_ref ref range index ALL。

  • const:命中主键或唯一索引 + 等值查询(如 WHERE id = 123),只查 1 行,最快
  • ref:走了非唯一索引(如普通 status 字段),但仍是等值匹配;可能返回多行,但能利用索引定位起始点
  • range:索引范围扫描(>、BETWEEN、IN),注意 IN 后面值太多会退化成 ALL
  • index:遍历整棵索引树(比 ALL 快,因为不用回表读数据行,但仍是全量扫索引)
  • ALL:必须警惕——没走任何索引,全表扫描,数据量一上去就卡死

Extra 里藏着真实瓶颈线索

Extra 不是补充说明,而是关键行为标记。常见值中,这几个最值得立即干预:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • Using filesort:排序没走索引,MySQL 自己在内存或磁盘做二次排序——加复合索引覆盖 ORDER BY 字段
  • Using temporary:创建了临时表,常见于 GROUP BY、DISTINCT、含 UNION 的查询——检查是否能用索引避免分组/去重
  • Using index condition:用了索引下推(ICP),是好事,说明 MySQL 在存储引擎层就过滤了部分数据,减少回表次数
  • Using where:表示 WHERE 条件在服务器层做了过滤(非全部下推到引擎),结合 type 看——如果 type 是 ALL 还带这个,基本等于全表扫完再筛

别忽略 SHOW WARNINGS 里的重写 SQL

执行 EXPLAIN SELECT ... 后,如果看到 “1 warning”,立刻跟一句 SHOW WARNINGS。MySQL 5.7+ 默认会显示优化器改写后的语句,比如:

SELECT * FROM t WHERE id IN (1,2,3) AND status = 'active'

可能被重写为:

SELECT * FROM t WHERE (id = 1 OR id = 2 OR id = 3) AND status = 'active'

这种重写会影响索引选择——原 IN 可能走 range,拆开后可能触发更优的 ref 或 eq_ref。不看 WARNINGS,你就永远不知道优化器到底在想什么。

真正难调的不是语法错误,而是优化器“自作聪明”却没选对路——EXPLAIN 是唯一能把它决策过程摊开来看的工具,但得连 id、type、Extra 和 WARNINGS 四块一起读,缺一不可。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4523

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

931

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1189

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6481

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3263

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6440

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8841

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1190

2024.04.29

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 191人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn