1. 作用:当explain与mysql一起使用时,MySQL会显示来自优化器关于sql执行的信息。即MySQL解释了它将如何处理该语句,包括如何连接表以及什么顺序连接表等。
2. 信息:explain执行计划包含字段信息如下: id select_type table partitions type possible_keys key key_len ref row filtered Extra (12个)
3. 详解
id: 表示查询中执行select子句或者操作表的顺序,id的值越大,优先级越高,就越先执行。若id相同,说明优先级相同,执行顺序由上而下,具体顺序由优化器决定。
select_type: 表示select查询的类型,主要用于区分各种复杂的查询。例如 普通查询,联合查询、子查询等。
a. SIMPLE : 表示最简单的select查询,即在查询中不包括子查询或者union交并差集等操作。
b. PRIMARY: 当前查询包含任何复杂查询的子部分,最外层查询标记为PRIMARY
c. SUBQUERY:当select或者where列表中包含了子查询,该子查询标记为SUBQUERY
d. DERIVED: 表示包含在from子句中的子查询中的select,在from列表中包含的子查询会被标记为DERIVED
e. UNION: 如果union后边又出现了select语句,则会标记为UNION; 若UNION包含在from子句的子查询中,外层的select会被标记为DERIVED
f.UNION RESULT: 表示从union的临时表中读取数据。
table: 查询的表名,不一定是真实存在的表,有别名显示别名,也有可能是临时表。
partition: 查询时匹配到的分区信息,对于非分区表值为NULL,当查询的是分区表时,会显示分区表中命中的分区。
type: 查询使用了何种查询,在SQL优化中是非常重要的一个指标。以下性能从好到坏依次是:
system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all