mysql的执行计划

执行计划,就是一条SQL语句,在数据库中实际执行的时候,一步步的分别都做了什么。也就是我们用EXPLAIN分析一条SQL语句时展示出来的那些信息。

EXPLAIN命令是查看查询优化器是如何决定执行查询的主要方法,从它的查询结果中可以知道一个SQL语句每一步是如何执行的,都经历了些什么,分为哪几步,有没有用到索引,哪些字段用到了什么样的索引,是否有一些可优化的地方等,这些信息都是我们SQL优化的依据。

要使用·EXPLAIN,只需在查询中的SELECT关键字之前增加EXPLAIN。语法如下:

EXPLAIN + SELECT查询语句;

具体作用

  • 表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可以使用
  • 哪些索引被实际使用
  • 表之间的引用
  • 每张表有多少行被优化器查询

输出各字段解释如下。更详细的信息请参考explain输出参数

  • id:select查询序列号,id相同,执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;
  • select_type:查询数据的操作类型,有如下:
     simple,简单查询,不包括子查询和union;
    
     primary,包含复杂的子查询,最外层查询标记为该值;
    
     subquery,在select活where中包含子查询,被标记为该值;
    
     derived,在from列表中包含的子查询被标记为改值,MySQL会递归这些子查询,将结果保存到临时表;
    
     union,第二个select出现在union之后,被标记为该值;union包含在from的子查询中,外层select被标记为derived;
    
     union result,从union表获取结果的select;
    
  • table:显示该行数据是关于哪张表;
  • partitions:匹配的分区;
  • type:表的连接类型,其值、性能由高到底排列如下:
  • system,表中只有一行记录,相当于系统表;
  • const,通过索引一次命中,匹配一行数据;
  • eq_ref,唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用语主键或唯一索引扫描;
  • ref,非唯一性索引扫描,返回匹配某个单独值的所有行,用于=、<或>操作符带索引的列;
  • range,只检索给定范围的行,使用一个索引来选择行,一般用于between、<、>;
  • index,只遍历索引树;
  • all,全表扫描;

你可能感兴趣的:(mysql的执行计划)