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 原因
  • 面试直接满分
相关推荐
吴声子夜歌4 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
蓝天下的守望者5 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
上海云盾-小余5 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹5 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
TPBoreas6 小时前
MySQL性能优化面试全攻略
mysql·面试·性能优化
xlq223226 小时前
11.表的内外连接,索引
mysql
AllData公司负责人6 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2603_954708317 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全
IvorySQL7 小时前
从双解析器到循环工程:IvorySQL 五年技术演进路线的深度观察
大数据·数据库·人工智能·postgresql·开源
wefg17 小时前
【MySQL】事务
数据库·mysql