MySQL学习----Explain

使用Explain可以查看sql的性能瓶颈信息,并根据结果进行sql的相关优化。当使用 Explain分析 SQL 查询时,MySQL 会返回一个包含多个字段的结果集,每个字段都提供了查询执行计划的重要信息。

主要输出字段详解

(1)id

含义:SELECT 标识符

作用:表示查询中 SELECT 子句的执行顺序

值说明:

id 相同:执行顺序从上到下

id 不同:从大到小执行

id 为 NULL:表示结果集,如 UNION 结果

(2)select_type

含义:SELECT 查询类型

常见值:

SIMPLE:简单查询(不含子查询或 UNION)

PRIMARY:最外层查询

SUBQUERY:子查询中的第一个 SELECT

DERIVED:派生表(FROM 子句中的子查询)

UNION:UNION 中第二个或后面的 SELECT

UNION RESULT:UNION 的结果

(3) table

含义:访问的表名

说明:可能是实际表名、别名或派生表名

(4) partitions

含义:匹配的分区

作用:对于分区表,显示查询将访问哪些分区

(5)type

含义:访问类型(连接类型)

性能排序(从优到劣):

system > const > eq_ref > ref > range > index > ALL

详细说明:

system:表只有一行记录(系统表)

const:通过主键或唯一索引一次找到

eq_ref:唯一索引关联查询

ref:非唯一索引查找

range:索引范围扫描

index:全索引扫描

ALL:全表扫描

(6)possible_keys

含义:可能使用的索引

说明:理论上可能使用的索引,不一定实际使用

(7)key

含义:实际使用的索引

说明:可能不在 possible_keys 中(优化器自行选择)

(8)key_len

含义:使用的索引长度(字节)

作用:判断使用了索引的哪些部分

(9) ref

含义:与索引比较的列或常量

示例:显示哪些列或常量被用于查找索引列

(10) rows

含义:预估需要检查的行数

说明:基于统计信息的估算值

(11)filtered

含义:存储引擎返回数据在 server 层过滤后的百分比

范围:0-100,100 表示无需过滤

(12)Extra

含义:额外执行信息

常见值:

Using index:覆盖索引

Using where:使用 WHERE 条件过滤

Using temporary:使用临时表

Using filesort:使用外部排序

Using join buffer:使用连接缓冲

Impossible WHERE:WHERE 条件永远为假