mysql如何使用explain优化索引_mysql执行计划解读-mysql教程

EXPLAIN中type表示扫描方式,从ALL到const递进优化;key显示实际索引名,NULL代表未走索引;需结合rows、Extra及统计信息综合判断索引有效性与执行效率。

怎么看 EXPLAIN 输出里的 type 和 key

关键看是否走了索引、走的什么类型索引。type 是扫描方式,从差到好大致是:ALL(全表扫描)→ index(全索引扫描)→ range(范围查找)→ ref(非唯一索引等值匹配)→ eq_ref(主键/唯一索引等值连接)→ const(主键或唯一索引等值查询,只返回一行)。key 字段显示实际使用的索引名,如果是 NULL,说明没走索引。

常见陷阱:

  • type 是 index 不等于高效——它可能只是遍历整个索引 B+ 树叶子节点,和全表扫描 I/O 量接近
  • 即使 key 显示有索引,但 rows 值极大,说明索引选择性差或条件没用上最左前缀
  • 联合索引中,WHERE a = ? AND b > ? 能用到 (a,b) 的全部,但 WHERE b > ? 单独出现就完全用不上

EXPLAIN FORMAT=TREE 比传统格式多看出什么

MySQL 8.0+ 支持 FORMAT=TREE,能直观看到执行计划的嵌套结构和访问顺序,尤其对包含 JOIN、子查询、UNION 的语句更友好。它会明确标出“使用了物化”“使用了缓存结果”“是否下推条件”等信息。

实操建议:

  • 遇到 DEPENDENT SUBQUERY 或 MATERIALIZED,优先检查子查询能否改写为 JOIN;物化虽快,但首次执行开销大且结果不复用
  • 看到 符号(如 Filter: (t1.id > 100)),说明该条件在存储引擎层未下推,而是在 Server 层过滤,意味着回表后还要二次筛选
  • 对比 FORMAT=TRADITIONAL 和 FORMAT=TREE 的 rows 预估差异,若 TREE 版本预估明显更小,说明优化器对某些条件做了更精细估算(比如利用了统计信息)

为什么加了索引,EXPLAIN 还显示 type=ALL

不是建了索引就自动用,MySQL 优化器会根据成本估算决定是否走索引。常见原因包括:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » mysql如何使用explain优化索引_mysql执行计划解读-mysql教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4008359+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4008359+
  • 本周更新: 0+
  • 最后更新: 2026-03-16