mysql中EXPLAIN使用简单说明

id相同,顺序从上到下

id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

 

type所显示的是查询使用了哪种类型

从最好到最差依次是

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

  达到ref级别是最好的

       system 表只有一行记录(等于系统表),这是const类型的特列

      const 表示通过索引一次就找到了,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快

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

      ref 非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它可能会找到多个符合条件的行

      range  表示查询使用了索引范围查找,通常发生在查询条件中包含了范围条件

      index 表示使用了覆盖索引,查询只需要扫描索引而不需要访问实际的数据行。这通常发生在只选择了覆盖索引中的列,而不需要访问实际数据的情况下

possible_keys 

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

key

实际使用的索引,如果为NULL,则没有使用索引。(可能原因包括没有建立索引或索引失效)

key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好

extra解释

Using index: 表示查询使用了覆盖索引,即查询只需要扫描索引而不需要访问实际的数据行。这是一种性能优化,因为不需要额外的 I/O 操作。

Using where: 表示查询中使用了 WHERE 子句,即有过滤条件。

Using filesort: 表示排序操作没有使用索引,而是通过对结果进行文件排序。这可能会影响性能,特别是对于大数据集。

Using temporary: 表示 MySQL 在执行查询时使用了临时表。这可能是由于一些复杂的查询或排序操作而导致的。

Using join buffer (Block Nested Loop): 表示 MySQL 在执行连接操作时使用了连接缓冲区,这是一种连接算法。

Impossible WHERE: 表示查询的 WHERE 子句中包含了不可能为真的条件,这可能导致优化器优化掉了整个查询。

Select tables optimized away: 表示优化器对查询进行了优化,直接返回了一个常量结果而不需要访问表。

Range checked for each record: 表示在 Range 访问类型中,MySQL 对每个记录进行了范围检查。

Using sort_union: 表示在执行联合查询时使用了排序操作

  

 

posted @ 2022-05-15 16:37  不忘初心2021  阅读(35)  评论(0编辑  收藏  举报