Mysql: explain+sql执行结果参数解析

开发过程中,sql性能问题一直是我们关注的问题,使用explain+sql可看sql执行解析,例如是否命中索引等。以此来优化sql,达到提高性能的结果:
先来看看explain+sql 展示结果:
在这里插入图片描述
平常我们可能只关注possible_keys来看他是否命中索引,这里我们也来关注一下其他参数的意思。上官网地址:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain_select_type
做了一个纸面翻译,或多或少还是可以学到点。

id:
选择标识符。这是查询中选择的序号。如果该行引用其他行的并集结果,则该值可以为空。在这种情况下,表列显示一个类似<unionM,N>的值,以指示该行是指id值为M和N的行的并集。

select_type:
查询类型
在这里插入图片描述
依赖子查询计算不同于不可缓存子查询计算。对于依赖子查询,对于外部上下文中变量的每一组不同值,子查询只重新计算一次。对于不可缓存的子查询,将为外部上下文的每一行重新计算子查询。

table:
输出行所引用的表的名称。这也可以是以下值之一:
<union M,N>:该行指id值为M和N的行的并集。
<derivedN>:该行引用id值为N的行的派生表结果。例如,派生表可能来自from子句中的子查询。
<subqueryN>:该行是指id值为N的行的物化子查询的结果

partitions :
查询将从中匹配记录的分区。对于非分区表,该值为空。

type:
连接类型
下表描述了联接类型,从最佳类型到最差类型排序:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Possible_keys:
可能的_keys列表示MySQL可以选择从中查找该表中的行的索引。请注意,此列完全独立于EXPLAIN输出中显示的表的顺序。这意味着在生成的表顺序中,可能_keys中的一些键实际上可能不可用。
如果此列为空(或在JSON格式的输出中未定义),则没有相关索引。在这种情况下,您可以通过检查WHERE子句来检查它是否引用了一些适合索引的列,从而提高查询的性能。如果是,请创建适当的索引,并再次使用EXPLAIN检查查询。

Key:
键列表示MySQL实际决定使用的键(索引)。如果MySQL决定使用一个可能的_keys索引来查找行,该索引将作为键值列出。
key可能会命名一个不存在于可能_keys值中的索引。如果所有可能的_keys索引都不适合查找行,但查询选择的所有列都是其他索引的列,则可能会发生这种情况。也就是说,命名索引覆盖选定的列,因此尽管它不用于确定要检索的行,但索引扫描比数据行扫描更有效。
对于InnoDB,即使查询也选择主键,辅助索引也可能覆盖选定列,因为InnoDB将主键值与每个辅助索引一起存储。如果key为NULL,则MySQL找不到用于更高效地执行查询的索引。

Key_len:
key_len列表示MySQL决定使用的键的长度。key_len的值使您能够确定MySQL实际使用的多部分密钥的多少部分。如果key列表示NULL,key_len列也表示NULL。
由于密钥存储格式,可以为空的列的密钥长度比不为空的列长一倍。

Ref:
ref列显示将哪些列或常量与键列中命名的索引进行比较,以从表中选择行。
如果值为func,则使用的值是某个函数的结果。要查看哪个函数,请使用解释后显示警告以查看扩展解释输出。该函数实际上可能是一个运算符,例如算术运算符。

Rows:
rows列表示MySQL认为执行查询必须检查的行数。
对于InnoDB表,这个数字是一个估计值,可能并不总是精确的。

Filtered:
筛选列表示按表条件筛选的表行的估计百分比。最大值为100,这意味着没有对行进行过滤。值从100减小表示过滤量增加。rows显示检查的估计行数,rows×filtered显示与下表连接的行数。例如,如果行数为1000,过滤为50.00(50%),则与下表连接的行数为1000×50%=500。

Extra:
本专栏包含有关MySQL如何解析查询的其他信息。有关不同值的说明,请参见解释其他信息。
没有对应于额外列的单个JSON属性;但是,此列中可能出现的值将作为JSON属性或消息属性的文本公开。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值