MySQL 性能分析:Explain 执行计划深度解读

舞夢輝影

舞夢輝影

2026-07-26

723人浏览

原创

explain 是 mysql 性能分析起点,仅模拟优化器决策、不执行 sql;需重点关注 type(访问类型)、key(实际索引)、rows(预估扫描行数)和 extra(警告信号)四大字段来定位瓶颈。

mysql 性能分析:explain 执行计划深度解读

Explain 是 MySQL 性能分析的起点,不是万能诊断工具,但能快速暴露查询执行中的关键瓶颈。它不运行 SQL,只模拟优化器决策过程,因此结果反映的是“计划”,而非实际耗时——但这个计划往往直接决定实际表现。

看懂 type 字段:访问方式决定效率上限

type 是执行计划里最敏感的性能指标,它告诉你 MySQL 怎么读取数据。从好到差大致是:const ≈ eq_ref > ref > range > index > ALL。重点盯住是否出现 ALL(全表扫描)或 index(全索引扫描),这两类通常意味着低效。

  • type = const:用主键或唯一索引做等值查询,命中单行,最快
  • type = ref:用非唯一索引查多个匹配行,常见且健康
  • type = range:范围查询(如 >、BETWEEN、IN),只要范围不过大,可接受
  • type = ALL:没走任何索引,逐行扫描,数据量一上万就明显拖慢

确认 key 和 rows:索引是否真被用上?

key 显示实际生效的索引名,key 为 NULL 就等于没走索引;rows 是优化器预估要检查的行数,不是返回行数。这个值越接近实际结果集大小越好,如果 rows 是几万而实际只返回几十行,说明过滤能力弱,可能缺索引或索引未覆盖查询条件。

MySQL(Linux)
MySQL(Linux)

MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。

下载
  • possible_keys 有值但 key 为 NULL:索引存在,但优化器认为不划算,常因统计信息过期或条件写法导致失效(比如对字段加函数)
  • key_len 值偏小:复合索引只用了最左前缀的一部分,比如 (a,b,c) 索引,查询只含 a 和 c,b 被跳过,key_len 只反映 a 的长度
  • rows 远大于实际返回行数:WHERE 条件过滤性差,考虑补充索引或重写条件(如避免 LIKE '%xxx')

警惕 Extra 中的警告信号

Extra 不是补充说明,而是性能红灯。它揭示了优化器在执行计划中不得不做的“额外工作”,每一条都对应潜在优化点。

  • Using filesort:ORDER BY 无法利用索引排序,需额外内存/磁盘排序。解决办法是让 ORDER BY 字段包含在索引末尾,且顺序一致
  • Using temporary:GROUP BY、DISTINCT 或某些 JOIN 触发临时表。尽量让 GROUP BY 字段落在索引最左部分,或改用覆盖索引减少回表
  • Using index:好消息,表示走了覆盖索引,无需回表查数据行
  • Using where:正常情况,表示存储引擎返回后还需服务器层二次过滤;但如果配合 type=ALL,说明连基础索引都没用上

结合 id 和 select_type 判断查询结构复杂度

id 和 select_type 一起看,能还原出 SQL 的真实执行逻辑。简单查询 id 全是 1;子查询或 UNION 会让 id 出现不同数值或特殊类型。

  • id 相同:这些步骤属于同一层级,按从上到下顺序执行
  • id 越大,越先执行(注意:不是“优先级高”,而是依赖关系倒置,比如派生表必须先算出来)
  • select_type = DERIVED 或 SUBQUERY:说明有子查询,尤其是嵌套在 FROM 或 WHERE 里的,容易成为性能黑洞
  • select_type = UNION RESULT + table = NULL:这是合并结果的收口操作,本身不查表,但前面的 UNION 各分支可能各自低效

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Selenium WebDriver元素定位与页面操作教程
Selenium WebDriver元素定位与页面操作教程

本专题整理Selenium WebDriver元素定位、XPath、CSS Selector、等待机制、窗口切换、Frame处理、Alert弹窗、Cookie操作和文件上传等核心用法。

2026.08.05

0

26

Selenium Grid分布式测试与并行执行教程
Selenium Grid分布式测试与并行执行教程

本专题整理Selenium Grid架构、远程WebDriver、并行测试、Docker部署、Kubernetes动态Grid、浏览器矩阵和测试环境扩展方法,适合进阶自动化测试团队使用。

2026.08.05

0

18

Selenium常见报错排查与自动化测试稳定性
Selenium常见报错排查与自动化测试稳定性

本专题整理Selenium常见报错、驱动版本问题、元素找不到、点击失败、等待超时、浏览器闪退、脚本不稳定和测试用例维护方法。

2026.08.05

0

17

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

11

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

5

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

1

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

热门下载

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

精品课程

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

共1课时 | 122人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 221人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习