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 条件永远为假