mysql explain

Mysql Explain

id

  • id相同时,执行顺序由上至下;
  • 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行;
  • id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行.

select_type 表示了查询的类型, 它的常用取值有:

  • SIMPLE, 表示此查询不包含 UNION 查询或子查询
  • PRIMARY, 表示此查询是最外层的查询
  • UNION, 表示此查询是 UNION 的第二或随后的查询
  • DEPENDENT UNION, UNION 中的第二个或后面的查询语句, 取决于外面的查询
  • UNION RESULT, UNION 的结果
  • SUBQUERY, 子查询中的第一个 SELECT

type列:这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行
依次从最优到最差分别为:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

key
这一列显示mysql实际采用哪个索引来优化对该表的访问。

rows
这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数。

Extra
这一列展示的是额外信息。常见的重要值如下:

  • distinct: 一旦mysql找到了与行相联合匹配的行,就不再搜索了。
  • Using index:这发生在对表的请求列都是同一索引的部分的时候,返回的列数据只使用了索引中的信息,而没有再去访问表中的行记录。是性能高的表现
  • Using where:mysql服务器将在存储引擎检索行后再进行过滤。就是先读取整行数据,再按 where
    条件进行检查,符合就留下,不符合就丢弃。
  • Using filesort:mysql
    会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息。这种情况下一般也是要考虑使用索引来优化的。

相关推荐