编号 | 字段名称 | 字段说明 | 值 | 重要性 |
1 | id | SELECT查询序号,即为sql语句执行的顺序。数字越大越优先执行 | 1、2、3... | ★★ |
2 | select_type | select类型,用于区分是普通查询、子查询或联合查询 | simple:简单的查询,不含子查询和联合查询primary:子查询的最外层查询为primaryunion:在 union、union all 和子查询中的第二个和随后的 select为 uniondependent union:各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询就是 dependent unionunion result:从union表获取结果的 select为 union resultsebquery:在select或者where列表中包含子查询(不在from子句中)dependent sebquery:在 select 或者 where 列表中包含子查询derived:在 form 列表中包含的子查询被标记为 derived,也叫做派生类uncacheable sebquery:一个子查询的结果不能被缓存uncacheable union:表示 union 的查询结果不能被缓存 | ★★ |
3 | table | 表名或者别名,可能是临时表或者 union 合并结果集 | table_name | ★ |
4 | type | 访问类型,表示以何种方式去访问数据库 | system:系统表const:最多只能匹配到一条数据eq_ref:当进行等值联表查询使用主键索引或者唯一性非空索引进行数据查找ref:查询使用的字段是个非唯一性索引索ref_or_null:字段既需要关联条件,也需要 null 值index_merge:在查询过程中需要多个索引组合使用unique_subquery:利用唯一索引来关联子查询,不再扫描全表index_subquery:利用索引来关联子查询,不再扫描全表range:利用索引查询的时候限制了范围,在指定范围内进行查询index:全索引扫描all:全表扫描system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL | ★★★★★ |
5 | possible_keys | 显示查询可能使用哪些索引来查找 | 索引名称 | ★★ |
6 | key | 实际使用的索引 | 索引名称 | ★★★ |
7 | key_len | 索引中使用的字节数 | 数值 | ★★★ |
8 | ref | ref列显示使用哪个列或常数与key一起从表中查询 | 列名或const | ★★★ |
9 | rows | 显示MYSQL执行查询的行数,数值越大越不好 | 数值 | ★★★★★ |
10 | filtered | 百分比值, 表示存储引擎返回的数据经过滤后, 剩下多少满足查询条件记录数量的比例 | 百分比 | ★★★★ |
11 | extra | MySQL解决查询的详细信息 | using filtersort:说明 mysql 无法利用索引进行排序,只能利用排序算法进行排序using index:表示当前的查询是覆盖索引的,直接从索引中读取数据using where:使用 where 进行条件过滤using temporary :建立临时表来保存中间结果,查询完成之后把临时表删除using join buffer:使用连接缓存impossible where:where 语句的结果总是 false | ★★★★ |
1. id
id就是select查询序号,标志sql语句执行的顺序,数字大的先执行。
2.select_type
SELECT类型,它有以下几种值
2.1 SIMPLE
它表示简单的select,没有联合查询和子查询
2.2 PRIMARY
在有子查询的语句中,最外层的select查询就是primary
2.3 union
在 union、union all 和子查询中的第二个和后面的 select 会被标记为 union
2.4 dependent union
在包含 union 或者 union all 的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的 select_type 的值就是 dependent union
2.5 union result
从 union 表获取结果的 select 会被标记为 union result
2.6 sebquery
在 select 或者 where 列表中包含子查询(不在from子句中)
2.7 dependent sebquery
子查询中的第一个 select(不在 from 子句中),并且取决于外层查询
2.8 derived
在 form 列表中包含的子查询被标记为 derived,也叫做派生类
2.9 uncacheable sebquery
一个子查询的结果不能被缓存
2.10 uncacheable union
表示 union 的查询结果不能被缓存
3 Table
explain 语句访问的表名或者别名
4 type
访问类型,表示以何种方式去访问数据库
4.1 system
表仅有一行,这是const类型的特列
4.2 const
表最多有一个匹配行,const用于比较primary key 或者unique索引。
4.3 eq_ref
当进行等值联表查询使用主键索引或者唯一性非空索引进行数据查找
4.4 ref
查询使用的字段是个非唯一性索引索
4.5 ref_or_null
字段既需要关联条件,也需要 null 值
4.6 index_merge
在查询过程中需要多个索引组合使用
4.7 unique_subquery
利用唯一索引来关联子查询,不再扫描全表
4.8 index_subquery
利用索引来关联子查询,不再扫描全表
4.9 range
利用索引查询的时候限制了范围,在指定范围内进行查询
4.10 index
全索引扫描
4.11 ALL
全表扫描
5 possible_keys
显示查询可能使用哪些索引来查找,可能应用在这张表中的索引,一个或多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用
6 keys
实际使用的索引,如果为 null ,则表示没有使用索引
7 key_len
MYSQL使用的索引长度
8 ref
ref列显示使用哪个列或常数与key一起从表中查询
9 rows
显示MYSQL执行查询的行数,数值越大越不好
10 filtered
百分比值, 表示存储引擎返回的数据经过滤后, 剩下多少满足查询条件记录数量的比例.
11 Extra
该列包含MySQL解决查询的详细信息。
- using filtersort:说明 mysql 无法利用索引进行排序,只能利用排序算法进行排序
- using index:表示当前的查询是覆盖索引的,直接从索引中读取数据
- using where:使用 where 进行条件过滤
- using temporary :建立临时表来保存中间结果,查询完成之后把临时表删除
- using join buffer:使用连接缓存
- impossible where:where 语句的结果总是 false