MySQL explain字段总结

本文深入解析MySQL查询的执行过程,重点介绍`id`、`select_type`、`type`、`possible_keys`、`key`、`key_len`、`ref`、`rows`和`Extra`字段的含义与作用。了解这些概念有助于优化查询性能,提高数据库读取效率。通过对查询类型的区分,理解全表扫描、索引扫描的区别,以及如何利用覆盖索引和索引排序减少数据处理开销。
摘要由CSDN通过智能技术生成

作用

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

表组成

idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra

id(表的读取顺序)

为select查询的序列号,包含一组数字,表的加载顺序

  • id相同,执行顺序为从上到下顺序执行。
  • id不同,数字大的先执行

select_type(数据读取操作的操作类型)

查询类型,主要用于区别普通查询、联合查询、子查询等复杂查询。

字段
字段含义
SIMPLE简单的查询,不包含子查询或者UNION
PRIMARY查询中若包含复杂的子查询,最外层查询则被标记
SUBQUERY子查询
DERIVED在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表里。
UNION若第二个SELECT出现在UNION之后,则被标记为UNION;
若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DRIVED
UNION RESULT从UNION获取结果

type

访问类型

字段

达到range级别,最好能到ref

# 常见
system > const > eq_ref > ref > range > index > ALL
# 全
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
字段含义
system单表一行记录,const特例
const表示通过索引一次查到,用于比较primary key或者unique索引。因为只匹配一行数据,所以很快,
如将主键置于where,MySQL就能将查询转换为常数。
eq_ref唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。
常见于主键或唯一索引扫描或联表查询。
ref非唯一性索引扫描,返回匹配某个单独值的所有行
range只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。
一般where里有between、>、 <、 in。
index全索引扫描,index与ALL区别为index类型只遍历索引树。
通常比ALL快,因为索引文件较小。
ALL全表扫描

possible_key(那些索引可以使用)

显示可能应用到这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但查询时不一定使用
在这里插入图片描述

key(哪些索引实际被使用)

实际使用的索引。如果为NULL,则没有使用索引。
若查询中使用了覆盖索引,则该索引仅出现在key列表中。
如果建索引顺序和个数与查询的顺序和个数相等,则出现possible_key中NULL,key中有。
在这里插入图片描述

key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引长度。在不损失精确性的情况下,长度越短越好。为索引字段最大可能长度,并非实际使用长度

ref(表之间的引用)

显示索引哪一列被使用了,如果可能的话,是一个常熟。哪些列或常量被用于查找索引列上的值。

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

根据表统计信息及索引选用情况,大致估算出找出所需记录所需读取的行数。

Extra(其它信息)

字段含义
Using filesort说明MySQL会对数据使用的一个外部的索引排序,二不是按照表内的索引顺序进行读取。
MySQL中无法利用索引完成的排序操作成为“文件排序”。
创建了文件排序,导致更加复杂,消耗资源更多。
Using temporary新建了内部临时表保存中间结果,常见于order by、group by,最差
Using index使用覆盖索引(Covering Index),
Using where使用where
Using join buffer使用了连接缓存
impossible where不存在满足where中的条件元素
distinct找到第一个匹配元素后即停止查找同样的值
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值