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 原因
  • 面试直接满分
相关推荐
倔强的石头_1 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横1 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二1 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐2 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
ClouGence2 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
云技纵横2 天前
Gap Lock 死锁实战:5 秒在本地复现 MySQL 间隙锁死锁
后端·mysql
无响应de神2 天前
三、用户与权限管理
数据库·mysql
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql