MySQL 执行计划(EXPLAIN)背诵版

一、先背:执行计划怎么用

sql

复制代码
EXPLAIN SELECT * FROM 表 WHERE 条件;

只看 6 个字段:id、select_type、type、key、rows、Extra 这 6 个搞定,SQL 优化 90% 搞定。


二、核心字段逐字背诵版(必考必用)

1. id(执行顺序)

口诀:id 越大越先执行,id 相同从上往下执行。

  • id=1:主查询
  • id>1:子查询,数字越大优先级越高
  • id=NULL:最后执行(结果集计算)

2. select_type(查询类型)

只背 4 个:

  1. SIMPLE:简单查询(最优)
  2. SUBQUERY:子查询(性能差)
  3. DERIVED:衍生表 / 临时表(性能差)
  4. UNION:联合查询

判断:出现 SUBQUERY、DERIVED = 要优化


3. type(访问类型:SQL 快不快看它!)

背诵优先级(从好到坏)

plaintext

复制代码
system > const > eq_ref > ref > range > index > ALL

必须背下来的定义

  • const :根据主键 / 唯一索引查询,1 行结果(最优)
  • ref :普通索引查询,性能优秀
  • range :范围查询(between、in、>),合格
  • index :遍历索引树,一般
  • ALL全表扫描!必须优化!

底线标准

生产 SQL:type 必须 >= range,禁止 ALL!


4. key(实际使用的索引)

  • key = NULL没走索引,严重问题
  • key = 索引名:走了索引
  • key_len:索引长度,越大表示使用索引字段越多(越精准)

5. rows(扫描行数)

口诀:越少越好!

  • 越小 = SQL 越快
  • 大表 rows 上万 = 慢查询

6. Extra(额外信息:优化黄金区)

只背 5 个最关键:

  1. Using index 【最优】覆盖索引,不用回表,速度极快

  2. Using where 使用 where 过滤数据(正常)

  3. Using filesort 【严重】文件排序,必须优化! 原因:order by 字段无索引

  4. Using temporary 【严重】使用临时表,必须优化! 原因:group by 无索引

  5. Using where; Using index 【完美】覆盖索引 + 条件过滤


三、执行计划判断口诀(背诵版)

plaintext

复制代码
一看 type 是不是 ALL,是全表要修改
二看 key 是不是 NULL,没索引要创建
三看 Extra 两毒瘤:filesort、temporary 必须干掉
四看 rows 越少越好,超过千行要优化

四、3 秒判断 SQL 是否合格(背诵版)

一条好 SQL 执行计划必须满足:

  1. type >= range(不能是 ALL)
  2. key 不为 NULL(必须走索引)
  3. Extra 没有 Using filesort / Using temporary
  4. rows 尽量小

五、最常见 4 种坏情况 + 优化方案(背诵)

1. type = ALL(全表扫描)

优化:给 where 字段加索引

2. key = NULL(索引失效)

优化:

  • 索引列别用函数
  • 别隐式转换
  • 别违反最左前缀

3. Extra:Using filesort(文件排序)

优化:给 order by 字段建联合索引

4. Extra:Using temporary(临时表)

优化:给 group by 字段建索引


六、终极背诵版(一句话总结)

看 type 防全表,看 key 看索引,看 Extra 杀排序临时表,看 rows 看扫描量。


总结

你把上面内容背熟,就能:

  • 看懂任何 SQL 执行计划
  • 快速定位慢 SQL 原因
  • 面试直接满分
相关推荐
念恒123061 小时前
MySQL视图
数据库·mysql
骄马之死2 小时前
缓存与数据库一致性的核心方案
mysql·缓存
我叫张小白。2 小时前
基于Redis的缓存架构与一致性保障体系
数据库·redis·缓存·架构
Omics Pro2 小时前
基因泰克:检测级虚拟细胞基准!大语言模型+智能体
大数据·数据库·人工智能·机器学习·语言模型·自然语言处理·r语言
Quincy_Freak2 小时前
工具分享|基于 SQLiteGo 的国产系统离线数据处理方案
大数据·数据库·数据分析·arm·国产系统·银河麒麟·aarch64
我是一颗柠檬2 小时前
【Redis】数据类型详解Day2(2026年)
数据库·redis·后端·缓存
Trouvaille ~2 小时前
【Redis篇】List 列表:双端队列与消息队列的完美实现
数据库·redis·list·双端队列·后端开发·quicklist·zoplist
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第一章 Item 4 - 6)
android·数据库·论文阅读·python
土狗TuGou2 小时前
SQL内功笔记 · 第7篇:CTE&临时表&递归
数据库·笔记·后端·sql·mysql