9人参与 • 2026-03-17 • Mysql
explain 是 mysql 中用于分析 sql 执行计划的核心命令,它能告诉你 mysql 优化器会如何执行这条 sql(比如用什么索引、扫描多少行、连接方式等),是优化慢 sql 的必备工具。
可以把它理解为:你写了一条 sql 想让 mysql 执行,explain 会提前告诉你 mysql 的“执行思路”—— 走哪条路、做哪些操作、效率怎么样,帮你找到 sql 里的性能瓶颈。
explain + 你的sql语句; -- 示例 explain select * from user where id = 1;
如果想查看更详细的执行计划(比如执行时的成本、临时表等),可以用:
explain analyze select * from user where id = 1; -- mysql 8.0 及以上支持
执行 explain 后会返回一个结果集,核心字段如下(新手先掌握这 8 个核心字段即可):
| 字段 | 核心含义 |
|---|---|
| id | sql 执行的顺序(子查询/联表时会有多个 id,数字越大越先执行) |
| select_type | 查询类型(比如简单查询、子查询、联表查询、衍生表等) |
| table | 本次执行涉及的表名 |
| type | 访问类型(核心!判断性能的关键,从差到好:all < index < range < ref < eq_ref < const/system) |
| possible_keys | mysql 可能会选择的索引(候选索引) |
| key | mysql 实际使用的索引(如果为 null,说明没用到索引) |
| rows | mysql 预估要扫描的行数(数值越小越好) |
| extra | 额外信息(比如 using index 走覆盖索引、using where 过滤条件、using filesort 排序等) |
这是 explain 中最重要的字段,直接反映 sql 的性能层级,常见值从差到优排序:
示例:user 表有索引 idx_name_age (name, age),执行 explain select name, age from user where name = '张三';,extra 会显示 using index。
假设有一张 user 表,结构如下:
create table `user` ( `id` int primary key auto_increment, `name` varchar(20) not null, `age` int, `gender` tinyint, index `idx_name` (`name`) -- 普通索引 );
explain select * from user where age = 20;
explain select * from user where name = '张三';
explain select name from user where name = '张三';
到此这篇关于mysql中explain的具体实现的文章就介绍到这了,更多相关mysql explain内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论