news 2026/10/17 6:39:50

我的笔记:怎么用 MySQL 的 EXPLAIN 来分析 SQL

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我的笔记:怎么用 MySQL 的 EXPLAIN 来分析 SQL


我一直觉得 SQL 慢,大多数时候不是数据库不行,而是我们对执行计划(execution plan)不熟,EXPLAIN是一个很实用的工具。它就像给 SQL 做一次“体检”,能帮我们看到优化空间。


我是怎么理解EXPLAIN的

在我看来,EXPLAIN就是让数据库把它接下来要怎么执行这条 SQL 告诉你:

举个比喻:你写了个路线规划,EXPLAIN就是让数据库告诉你它“打算”怎么走这条路线。


基础使用方法

最常见的就是在你的 SELECT 语句前加上EXPLAIN:

EXPLAINSELECT*FROMusersWHEREage>25;

运行之后会返回一张表格,常见字段有:

字段我理解的含义
id这是执行步骤的编号
select_type这个查询是简单查询还是联合查询
table当前这一行操作的是哪个表
type最关键 —— 访问类型,越好越靠前
key实际使用的索引
rows估算扫描的行数
Extra附加信息,比如是否使用文件排序、临时表等

我觉得最值得关注的几项

访问类型 (type)

我自己用的时候,最先盯着这一列看。

从好到差,大致顺序是:

const eq_ref ref range index ALL

可以这么理解:


实际使用的索引 (key)

这一列其实挺直观的:它会告诉你,数据库是不是用了你预期的索引。

举例来说:

EXPLAINSELECT*FROMusersWHEREid=123;

假设你有主键索引 id,那么key应该是这条主键索引。

如果key显示为NULL,那就说明没有用索引 —— 很可能会导致全表扫描。


扫描行数 (rows)

EXPLAIN会给出一个估算值,表示数据库预计要扫描多少行。

这个其实很关键,因为它能让你直观感受到:

“这个查询要扫描多少数据?”

比如扫描了 100 万行和扫描了 10 行,其性能差距显然是不一样的。


附加信息 (Extra)

这一列包含一些补充信息,我觉得看这一项能帮我发现:

比如如果出现了:

Using temporary; Using filesort

这通常说明这个查询在排序或分组时效率不高,这时候我就会考虑:

有没有必要增加合适的索引?


一个简单的例子

假设有这样一张表:

CREATETABLEorders(idBIGINTPRIMARYKEY,user_idBIGINT,amountDECIMAL(10,2),created_atDATETIME,INDEXidx_user(user_id));

我写了两条查询:

EXPLAINSELECT*FROMordersWHEREuser_id=100;

如果输出里面:

我觉得这是“合理使用索引”的情况。

再看看:

EXPLAINSELECT*FROMordersORDERBYamount;

可能出现:

说明这条排序没走索引,这时候我就会考虑:

“如果这条查询是常用的,是否应该在 amount 上加一个索引?”


我理解的几个优化思路

基于EXPLAIN的输出,我通常会这么判断:

查看是否走索引

把key看成“有没有走索引”,没有的话就看是否需要加。

扫描行数是否合理

如果 rows 数特别大,那就说明过滤条件不够好或者没有索引。

注意Extra里是否有不良信息

比如:

这两个我都不太喜欢看到,它们往往意味着性能有提升空间。


我总结几点个人经验


结语

总的来说,我认为EXPLAIN就像是数据库对你说:

我打算怎么执行这条 SQL。

理解它,不是为了背输出字段,而是为了能根据结果判断这条 SQL 有没有优化的空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 0:51:35

Sarasa Gothic字体选择完全指南:最佳开源字体方案详解

Sarasa Gothic字体选择完全指南:最佳开源字体方案详解 【免费下载链接】Sarasa-Gothic Sarasa Gothic / 更纱黑体 / 更紗黑體 / 更紗ゴシック / 사라사 고딕 项目地址: https://gitcode.com/gh_mirrors/sa/Sarasa-Gothic Sarasa Gothic(更纱黑体&…

作者头像 李华
网站建设 2026/10/15 18:42:03

服务器卡了还在跑机房?DashDot + cpolar,手机躺看监控数据

DashDot 是一款轻量级服务器监控工具,能实时展示 CPU、内存、存储、网络等状态,界面有赛博朋克风和极简白两种主题,数据可视化做得很直观。它适合运维人员、个人服务器用户,甚至 NAS 玩家 —— 不用像 Prometheus 那样配置复杂&am…

作者头像 李华
网站建设 2026/10/15 8:29:58

VIT位置编码缺陷:影响OCR细粒度识别的原因

VIT位置编码缺陷:影响OCR细粒度识别的原因 📖 OCR文字识别的技术演进与挑战 光学字符识别(OCR)作为连接物理世界与数字信息的关键技术,广泛应用于文档数字化、票据处理、智能交通等领域。随着深度学习的发展&#xff0…

作者头像 李华
网站建设 2026/10/15 18:40:06

ZLMediaKit录制功能终极指南:5分钟快速构建专业视频录制系统

ZLMediaKit录制功能终极指南:5分钟快速构建专业视频录制系统 【免费下载链接】ZLMediaKit 项目地址: https://gitcode.com/gh_mirrors/zlm/ZLMediaKit 想要构建一个功能强大的流媒体服务器录制系统?ZLMediaKit录制功能正是您需要的完美解决方案&…

作者头像 李华
网站建设 2026/10/16 12:30:46

Wan2.1-FLF2V:开启AI视频创作新纪元的全能工具

Wan2.1-FLF2V:开启AI视频创作新纪元的全能工具 【免费下载链接】Wan2.1-FLF2V-14B-720P-diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers Wan2.1-FLF2V-14B-720P-diffusers是一款革命性的AI视频生成工具&am…

作者头像 李华