首页 >文档 > mysql 使用 explain 查询执行计划 不同的字段有什么意思

mysql 使用 explain 查询执行计划 不同的字段有什么意思

MySQL EXPLAIN执行计划详解:掌握SQL优化核心技能!本文深度解析EXPLAIN各字段含义,包括id执行顺序、select_type查询类型、type访问方式(const/ref/range等)、possible_keys可能索引、key实际索引、rows扫描行数、Extra附加信息等关键指标。通过分析执行计划,快速定位全表扫描、索引失效、临时表使用等性能问题,提升SQL查询效率。学习如何利用type字段判断查询性能,识别Using filesort和Using temporary等警告信息,结合rows和filtered评估查询成本。适合DBA、开发人员及面试准备者,帮助您系统掌握MySQL性能优化实战技巧。

mysql 使用 explain 查询执行计划 不同的字段有什么意思

面试鸭返利网

先给大家分享个干货资源——2025年Java面试宝典
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g 提取码: 9b3g
这个网盘里整理了高频考点和实战解析,建议搭配本文一起看效果更佳!


一、为什么要用 EXPLAIN 看执行计划?

面试中遇到 SQL 优化问题,面试官必问的就是:“说说 EXPLAIN 的字段含义”。EXPLAIN 是 MySQL 的执行计划分析工具,它能告诉你数据库怎么处理你的 SQL 语句——比如用哪个索引、是否全表扫描、有没有临时表等。这些信息直接决定了 SQL 的性能上限。

举个例子:如果 type 字段显示 ALL,说明这条 SQL 在扫全表,这时候就得赶紧优化索引了;如果 Extra 出现 Using filesort,说明排序没走索引,可能拖慢查询速度。掌握 EXPLAIN 各个字段的含义,就像拿到了 SQL 优化的“CT扫描仪”。


二、EXPLAIN 执行计划字段详解

2.1 id:执行顺序的身份证

id 代表查询中每个子步骤的执行顺序。如果多个步骤的 id 相同,说明这些步骤是同一层级的,执行顺序从上到下;如果 id 不同,数值大的先执行。比如嵌套查询时,内层子查询的 id 会比外层的大。

2.2 select_type:查询类型识别码

这个字段告诉你当前步骤是哪种查询类型:

  • SIMPLE:简单查询(没有子查询或 UNION)
  • PRIMARY:外层主查询
  • SUBQUERY:子查询中的第一个 SELECT
  • DERIVED:衍生表(比如 FROM 后的子查询生成的临时表)
    如果是 UNION 查询,还会出现 UNIONUNION RESULT 类型。

面试鸭返利网

2.3 table:操作的是哪张表?

这里显示当前步骤操作的表名。如果是子查询生成的临时表,可能会显示 <derivedN>(N是子查询的 id)。如果是 UNION 合并的结果,可能显示 <union1,2> 这样的格式。

2.4 partitions:分区命中情况

如果表做了分区设计,这个字段会显示实际命中的分区名称。没分区的话这里就是 NULL

2.5 type:访问类型(重点!)

这是面试高频考点!表示 MySQL 如何查找数据,性能从高到低排序:

  • system:表只有一行数据(系统表)
  • const:通过主键或唯一索引查到一条记录
  • eq_ref:联表查询时,主键或唯一索引匹配(比如 A.id = B.id
  • ref:非唯一索引查找
  • range:索引范围扫描(BETWEEN、IN、>等操作)
  • index:全索引扫描
  • ALL:全表扫描(必须优化!)

2.6 possible_keys:可能用到的索引

显示查询可能会用到的索引列表,但实际不一定用。如果这里为空,说明没有可用索引,得考虑加索引了。

2.7 key:实际使用的索引

MySQL 最终选择的索引。如果显示 NULL,说明没走索引;如果和 possible_keys 不一致,可能是优化器觉得其他索引更优。

2.8 key_len:索引长度

表示索引中使用的字节数。比如联合索引 (a,b,c),如果只用到 ab,这里会显示前两列的长度总和。这个值越大,说明用到的索引越充分。

2.9 ref:索引匹配的列

显示索引查找时用了哪些列或常量。比如 const 表示用常量值匹配索引,func 表示用了函数处理。

2.10 rows:预估扫描行数

MySQL 估计要扫描多少行才能返回结果。这个值越小越好,如果数值很大,说明索引可能没生效。

2.11 filtered:过滤比例

表示存储引擎返回的数据经过 WHERE 条件过滤后剩下的百分比。比如 rows=1000filtered=10%,则最终大约要处理 1000×10% = 100 行。

2.12 Extra:附加信息(细节杀手)

这里会显示一些关键细节,比如:

  • Using index:覆盖索引(不需要回表)
  • Using where:WHERE 条件过滤了部分数据
  • Using temporary:用了临时表(常见于 GROUP BY/ORDER BY 没走索引)
  • Using filesort:文件排序(需要优化排序字段的索引)

面试鸭返利网


三、实战技巧:如何快速定位 SQL 问题?

  1. 先看 type 是否出现 ALLindex
  2. 检查 key 是否实际用了索引
  3. 关注 Extra 中的警告(如 Using filesort
  4. 结合 rowsfiltered 评估数据扫描量

如果你正在准备面试,可以试试在 面试鸭返利网 购买会员,通过返利能省25元。他们的题库更新快,覆盖了MySQL优化、索引设计等高频考点,特别适合突击复习!

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

🎯 立即加入面试鸭会员 →

今日有支付宝大红包赶快领,手慢无

支付宝红包二维码

支付宝扫码领取1-8元无门槛红包

支付宝红包二维码