【MySql】Explain执行计划

Explain

-- 使用
Explain + SQL

分析执行计划:

  • id:表示此表的执行优先级

    • id相同,表的执行顺序依次从上往下;

                        

    • id不同,并且递增,id值越大执行优先级越高,越先被执行;

       

  • select_type:读取一张表的操作类型

    • SIMPLE:简单SELECT查询,并且整个语句中的查询不包含<子查询>和<联合查询UNION>

    • PRIMARY:复杂查询中最外层查询,即PRIMARY

    • SUBQUERY:子查询``

    • DERIVED:衍生,FROM后面跟的子查询; select * from (select * from t1 where id = 1) d1 

    • UNION:联合查询

    • UNION RESULT:UNION合并的结果集;

  • table:表示这一行操作,是哪一张表的

  • type:表示此条查询的检索方式(7种,下面是按照效率由高到低排列)

    • system:基本用不到,表示一张表,只有一条记录;

    • const: where id = 1 指定的常量查询;

    • eq_ref:唯一索引扫描;对于某个索引键,表中只有一条记录与之匹配;(比如id主键索引)

    • ref:非唯一索引扫描; where name = 'ZhangSan' ,如果ZhangSan不止一个人,且name字段建有索引,那么就是ref检索;

    • range: where id between 30 and 60 或者类似 where id in (1,3,5) 

    • index: select id from user 其中id是主键索引;

    • ALL:表明检索方式为全表扫描;出ALL类型检索,需要优化。

  • possible_keys:可能用到的索引

  • key:实际使用的索引

  • key_len:索引中使用的字节数

    

  • ref:MySQL 用来与索引值进行比较的值。单次 const表示的是对常数进行比较,若是某个列的名称,则表示逐个比较列。

  • rows:大致估算出每张表有多少行记录被查询了

  • Extra:额外信息

    • Using filesort:文件排序,在无法通过索引来进行排序的情况下,就会默认使用文件排序;如果出现此信息,表示需要优化;

    • Using temporary:使用临时表,表示在排序时,使用了临时表;也是提示我们,此语句需要优化;

    • Using index:表明相应的查询操作中,使用了覆盖索引

      如果同时伴有Using where:表明索引被用来执行索引键值的查找;

    

      如果不带有Using where:表明索引用来读取数据,而非查找动作;

    

    • impossible where:表示错误的where,比如 where name = 'lisi' and name = 'zhangsan' 

    • distinct:自动优化distinct关键字,在找到第一条匹配项后停止

Explain例子

表的执行顺序:

  1. 【select name, id from t2】

  2. 【select id, name from t1 where other_column = ' '】子查询

  3. 【select id, from t3 】衍生查询

  4. 【select d1.name ...】最外层查询

  5. UNION操作

posted @ 2019-10-15 20:48  mussessein  阅读(114)  评论(0编辑  收藏  举报