Explain命令详解

基本字段说明

  • id:查询语句执行顺序标识

    • id值越大,执行优先级越高
    • id值越小,执行优先级越低
    • id相同时,按行内顺序执行
  • partition:分区信息(常用于分库分表场景)

  • filtered:预估关联表连接行数(计算公式:rows × filtered/100)

select_type字段(SQL执行类型)

类型 说明
SIMPLE 简单查询(无关联、子查询)
PRIMARY 复杂查询中最外层的select
SUBQUERY 包含在select中的子查询(不在from子句中)
DERIVED 衍生查询/衍生表(from子句生成的临时表)

区别说明

  • SUBQUERY:select子句生成的查询表
  • DERIVED:from子句生成的临时表

type字段(查询范围)

按性能优劣排序(从优到差): system > const > eq_ref > ref > range > index > ALL

各类型说明

类型 说明
Null 优化阶段即可获取结果(如SELECT MIN(id) FROM table
system const特例,表结果集仅一条记录
const 使用主键/唯一索引查询单条记录(效率极高)
eq_ref 关联查询使用主键/唯一键
ref 使用普通索引/唯一索引部分前缀
range 索引范围查找
index 扫描全索引获取结果(通常扫描二级索引)
ALL 全表扫描(聚簇索引顺序扫描)

性能建议

  • 至少达到range级别
  • 最好达到ref级别
  • 避免ALL全表扫描

其他重要字段

  • possible_key:可能用到的索引
  • key:实际使用的索引
  • key_len:使用的联合索引字段长度
  • ref:索引关联查询条件
  • rows:预估扫描行数(非实际结果行数)

Extra字段(额外信息)

信息 说明
Using Index 覆盖索引,无需回表
Using Where 使用where条件处理结果(未走索引)
Using index condition 查询列未完全覆盖索引,where条件使用前导列范围查询
Using temporary 使用临时表
Using filesort 使用文件排序

补充命令

在explain语句后添加SHOW WARNINGS可以查看MySQL优化后的语句(注意:优化后的语句不一定可直接执行)。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐