explain的中文是解释的意思,在mysql中,explain主要是用于分析查询语句或表结构的性能瓶颈。从而让我们优化调整sql语句,从而达到更高的效率。

explain执行结果字段说明

id

表的读取顺序,该字段通常与table字段搭配来分析。

select_type

数据读取操作的操作类型,用于区别普通查询、联合查询、子查询等复杂的查询。

1、SIMPLE:简单的select查询,查询中不包含子查询或union查询。

2、PRIMARY:主要的,查询中若包含任何复杂的子部分,最外层查询为PRIMARY。

3、SUBQUERY:子查询,在select或where列表中包含了子查询,就为被标记为SUBQUERY。

4、DERIVED:衍生查询,在from列表中包含的子查询会被标记为DERIVED(衍生),MySQL会递归执行这些子查询,将结果放在临时表中。

5、UNION:联合查询,若第二个select出现在union后,则被标记为UNION,若union包含在from子句的子查询中,外层select将被标记为DERIVED。

6、UNION RESULT:从union表获取结果的select。

table

读取的数据表名,显示sql操作属于哪张表的。

partitions

值为NULL表示表未被分区。

type

查询所使用的访问类型,表示查询的sql语句好坏,从最好到最差的依次为:system>const>eq_ref>ref>range>index>ALL。一般来说要尽量达到range

possible_keys

哪些索引可以使用。

key

哪些索引被实际使用。

key_len

表示索引中所使用的字节数,可通过该列计算查询中使用的索引长度。在不损失精确性的情况下,长度越短越好。

ref

表直接的引用。

rows

每张表有多少行被优化器查询。

filtered

百分比值,表示存储引擎返回的数据经过滤后,剩下多少满足查询条件记录数量的比例。

extra

显示十分重要的额外信息。