Explain使用简介

2021/4/18 18:58:31

本文主要是介绍Explain使用简介,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Explain之id(重点)

select查询的一组序列号,表示查询中执行select子句或者操作表的顺序。

  1. id相同,执行顺序由上至下。
  2. id不同,id越大优先级越高,越先被执行。
    在这里插入图片描述
  3. id相同不同,同时存在。id越大优先级越高,约先执行;id相同,顺序执行。在这里插入图片描述

Explain之select_type

在这里插入图片描述

  1. SIMPLE
    简单查询,查询中不包含自查询或者UNION
  2. PRIMARY
    查询中包含子查询,最外层查询标记为PRIMARY
  3. SUBQUERY
    子查询
  4. DERIVED
    from列表中出现子查询被标记为DERIVED,mysql会将查询结果放在临时表中。
  5. UNION
    如果第二个select出现在UNION之后,则被标记为UNION
    如果UNION包含在from子句的子查询中,则外层SELECT被标记为:DERIVED
  6. UNION RESULT
    从UNION表获取结果的SELECT

Explain之table

显示这一行数据是关于哪张表的。

Explain之type(重点)

显示查询用了何种类型。

从最好到最差依次是:
system>const>eq_ref>ref>range>index>all
一般来说,最少达到range级别。

  1. system
    表中只有一行记录
  2. const
    表示通过索引一次就找到了,用于主键索引/唯一索引。因为只匹配一行记录,所以很快。比如将主键置于where条件。
  3. eq_ref
    唯一性索引扫描,对于每个索引键,表中只有一条记录匹配。常见主键索引/唯一索引。
  4. ref
    非唯一性索引扫描,返回匹配单个值的所有行。
  5. range
    只检索给定范围的行,使用一个索引来选择行。
    一般就是你的where语句中出现了between/in等查询。
    这种范围扫描索引比全表扫描好,因为只需要开始与索引的某一行,结束与某一行,不用扫描全部索引。
  6. index
    index和all的区别在于,index只遍历索引树,通常比all快,因为索引文件比数据文件小。
    (虽然index和all都是全表读,但是index是从索引中读取,all是从硬盘读取)
  7. all
    遍历全表找到匹配行。

Explain之possible_keys

显示可能应用在这个表的索引,一个或多个。
查询涉及到的字段上若存在索引,将会被列出。但是实际上未必使用。

Explain之key(重点)

实际使用到的索引。如果是NULL,则没有使用索引。
若查询用使用到了覆盖索引,则该索引仅出现在key列表中。

Explain之key_len

表示索引中使用的字节数,可通过该列计算出查询中使用索引的长度。

Explain之ref

显示索引中哪一列被使用了,如果可能的话,是一个常数。

Explain之rows(重点)

大致估算出查出所需记录需要读取的行数。

Explain之Extra(重点)

  1. using filesort
    说明mysql会对数据使用一个外部的索引排序,而不是按着表内索引顺序。mysql无法利用索引完成的排序成为“文件排序”
    在这里插入图片描述
  2. using temporary
    使用临时表保存中间结果,mysql在对查询结果排序的时候使用临时表。常见于order by /group by。
    在这里插入图片描述
  3. using index
    表示使用到了覆盖索引。
    如果同时出现using where,表示索引被用来执行索引键值的查找。
    如果没有出现using where,表示索引被用来读取数据。
    在这里插入图片描述

来源:https://www.bilibili.com/video/BV1mt411g7r4?p=200



这篇关于Explain使用简介的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程