mysql里的explain介绍

来自尚硅谷视频

Explain关键字:可以模拟优化器,执行SQL查询语句。

语法: explain +SQL语句

Explain作用:查看表的读取顺序

      数据读取操作的操作类型

      哪些索引可以使用

      哪些索引被实际使用

      表之间的引用

      每张表有多少行被优化器查询

Explain包含的表头:

 

 

 id: select 查询的序列号,包含一组数字

    id相同:从上而下执行

    id 不同:数字大的先执行。

 select_type:数据读取操作的操作类型

      simple:简单select查询,查询中不包含子查询或union

      primary:查询中若包含复杂的子部分,最外层则被标记为primary

      subQuery:在from 或where列表中包含子查询

      union:若第二个select查询出现在union之后,则被标记为union

         若union包含在from子句的子查询中,外层的select将被标记为 Derived

      union Result:从union中获取数据

type:显示查询使用了何种类型

  从最好到最差

  system>const>eq_ref>ref>range>index>all

  实际开发中至少达到range级别 最好到ref级别

  system:表中只有一行记录

  const:通过索引一次就查到

  eq_ref:唯一性索引扫描,表中只有一条记录与之匹配

  ref:返回匹配某个值的所有行(查找和扫描的混合体)

  range:只检索给定范围的行。

possible_keys:显示可能应用在这张表中的索引,一个或多个

key:实际使用的索引。

   如果为null :没有使用索引

        索引失效

key_len:表示索引中使用的字节数,长度约短越好

    key_len并非索引名的实际长度。而是根据表定义计算得出。

ref:显示索引的哪一列被使用(索引列的值被引用)

rows:每张表有几条记录被优化器查询。

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

   using filesort: mysql中无法利用索引完成排序操作(需要优化SQL

   using temporary:使用临时表保存中间结果。(急需优化SQL)

          MySql在对查询结果进行排序时使用临时表。

          常见排序:order by 和分组查询 group by

   using index:同时出现using where 表明索引被用来执行索引键值查找(SQL写的很棒)

         没有出现using where 表明索引用来读取数据,而非执行查找操作

          using where:使用了where 过滤

   using join buffer:使用了缓存

   impossible where:where 里的字段赋值有歧义。

 

 

      

      

 

posted @ 2020-05-15 20:27  玄空2  阅读(139)  评论(0编辑  收藏  举报