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 原因
  • 面试直接满分
相关推荐
Random Glow7 小时前
二级索引与回表:一次回表到底多贵
数据库·mysql·性能优化·innodb·索引
CarIise7 小时前
JDBC 与数据库事务核心
数据库·笔记
见闻小天地7 小时前
新手入门:印刷包装设备的伺服和PLC运动控制方案各管什么?七步选型讲清楚
运维·网络·数据库·人工智能
海鸥-w8 小时前
Redis 配置与排错说明
java·数据库·redis·bootstrap
jaysee-sjc8 小时前
【苍穹外卖】Day12:工作台数据看板与 Excel 报表导出
java·开发语言·数据库·spring boot·spring·微信·excel
sunburn-9 小时前
数据库聚合查询完整教程:从基础函数到实战统计
java·数据库·mysql·数据库开发
小蒜学长9 小时前
基于 Spring Boot 的英语单词背诵系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
中电金信9 小时前
开发更高效、监控更实时、运维更省心,源启数据开发平台构筑一站式数据开发新底座
网络·数据库·人工智能
泡海椒9 小时前
深度解析JQuick-SQL 谓词下推与投影下推优化机制
数据库·sql
❀͜͡傀儡师10 小时前
MySQL REST Service 认证鉴权体系与 MySQL 26.10.0 内置化演进
数据库·mysql·adb