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
显示十分重要的额外信息。