MySQL的Explain

Explain

使用EXPLAIN关键字可以模仿优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句,分析SQL语句的性能瓶颈出现在哪里。

显示信息

id

select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。

id相同,执行顺序由上至下。id不同(子查询的时候),id值越高,优先级越高,越先执行。

select_type

select_type,查询类型,用于区别普通查询、联合查询、子查询等复杂查询。

  • SIMPLE,简单SELECT查询,不包含子查询和UNION
  • PRIMARY,查询中包含子查询,最外层标记为PRIMARY
  • SUBQUERY,子查询标记为SUBQUERY
  • DERIVED,临时表的衍生
  • UNION,第二个SELECT出现在UNION之后,则标记为UNION
  • UNION RESULT,从UNION表获取结果的SELECT
table

显示是哪张表

type

访问类型。system>const>eq_ref>ref>range>index>ALL

保证查询达到range级别,最好达到ref。

  • system,表只有一行记录,等于系统表
  • const,表示通过索引一次就找到了记录
  • eq_ref,联表查询,表中只有一条记录与索引键匹配
  • ref,返回所有匹配某个单独值的行
  • range,只检索给定范围的行
  • index,只遍历整个索引树
  • ALL,扫描整个表
possible_keys

显示可能应用在这张表中的索引,一个或多个。查询设计到的字段若存在索引,则该索引将被列出,但不一定被实际查询使用。

key

实际使用的索引。可以用来判断索引是否失效。

key_len

表示索引中使用的字节数,可以通过该列计算查询中使用的索引的长度。越少越好。

ref

显示索引的哪一列被使用了。

rows

大致估算找到所需的记录所需要读取的行数。

Extra

包含不适合在其他列显示但十分重要的额外信息。

  • Using filesort,对数据使用一个外部的索引(文件排序)排序,不是按照表内的索引顺序。
  • Using temporary,使用了临时表保存中间结果用于排序或分组,常见group by和order by。
  • Using index,表示相应的select使用了覆盖索引,避免访问了表的数据行。
  • Using where,使用了where过滤
  • Using join buffer,使用了连接缓存
posted @ 2020-03-28 15:14  Tanglement  阅读(140)  评论(0编辑  收藏  举报