mysql explain语句解析

  通过对查询语句的分析,可以来了解查询语句的执行情况,找出查询语句执行的瓶颈,从未进行优化查询语句。

  EXPLAIN语句的基本语法 

explain select select_options

  我们通过explain语句进行查询

explain select * from class;

  

 

 

 下面我们对查询结果进行分析

  id:select识别符。这时select的查询序列号

  1. 如果为子查询,则id 的数字越大,则优先级越高
  2. id如果为相同,可以认为是同一组,从上往下进行查询
  3. 在所有组中,id越大则优先级越高

  select_type:连接类型

  1. SIMPLE表示简单查询,其中不包括连接查询和子查询
  2. PRIMARY:表示主查询,或者是最外层的查询语句
  3. UNION表示连接查询的第二个或者后面的查询语句
  4. UNION RESULT:表示连接查询的结果
  5. DERIVED表示导出表的select

  table:表示查询的表

  type:表示表连接的类型

  1. system:该表只有一行数据,这是const的一种特例,但是实际几乎不会出现,因为在实际开发中不可能出现一张表只存有这一行数据的现象
  2. const:表示通过索引一次就找到了,const用于primary,unique索引。因为其只匹配一条数据。若将主键置于where中,mysql就能将其转换成一个常量

  eq_ref:唯一性索引扫描,对于每个索引值表中只有一条记录与之匹配。常见与主键或者唯一索引扫描

  ref:对于来自前面表的任意行组合,将从该表中读取所有匹配的行。

  range:只检索给定范围的行,使用一个索引来选择行。当使用=,<>,>,>=,<,<=,<,is null,<=>,between或者in操作符,用常量比较关键字时,类型为range

  index:该连接类型与ALL相同。但它只扫描索引树,因为所以文件通常比数据文件小,通常比ALL更快

  ALL:进行全表扫描,出现呢这种情况是,需要通过建立索引来进行优化sql查询语句

  上面所提到的连接类型是最为常见的类型,其性能依次降低

  possible_key:指出mysql能使用哪个索引在该表中进行查询,若为null,则没有相关索引

  key:表示在查询中mysql实际用到的锁引,若为null,则实际查询中没有用到索引,可能是没有相关索引或者索引失效

  key_len:表示mysql选择的索引字段按字节计算的长度

  ref:表示使用哪个列或者常数与索引一起查询记录

  rows:显示mysql在查询时必须检查的行数

  Extra:表示mysql在处理查询时的详细信息

  1. using filesort(性能非常差):说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。mysql中无法利用索引完成的排序称为文件排序。
  2. using temporary(性能非常差):新建了内部临时表,使用了临时表保存中间结果。常见于order by,group by,所以分组和排序一定要按照锁建立的索引的名字和顺序.

 

 

  

 

posted @ 2021-03-27 20:25  zou-ting-rong  阅读(86)  评论(0编辑  收藏  举报