Explain性能分析(三)——Extra

前言

继续上一篇的文章往下写。
Explain性能分析概述
Explain性能分析(一)
Explain性能分析(二)
Explain性能分析(三)

正文

五、possible_keys

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

六、key

实际使用的索引。如果为NULL,则没有使用索引。

七、key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。 key_len 字段能够帮你检查是否充分的 利用上了索引。ken_len 越长,说明索引使用的越充分。
Explain性能分析(三)——Extra_第1张图片
Explain性能分析(三)——Extra_第2张图片

如何计算:
①先看索引上字段的类型+长度比如 int=4 ; varchar(20) =20 ; char(20) =20
②如果是 varchar 或者 char 这种字符串字段,视字符集要乘不同的值,比如 utf-8 要乘 3,GBK 要乘 2,
③varchar 这种动态字符串要加 2 个字节
④允许为空的字段要加 1 个字节 第一组:key_len=age 的字节长度+name 的字节长度=4+1 + ( 20*3+2)=5+62=67 第二组:key_len=age 的字节长度=4+1=5
Explain性能分析(三)——Extra_第3张图片

八、ref

显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值。
在这里插入图片描述

九、rows

rows 列显示 MySQL 认为它执行查询时必须检查的行数。越少越好!
在这里插入图片描述

十、Extra

1、 Using filesort

说明 mysql 会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL 中无法利用索引 完成的排序操作称为“文件排序”。 出现 filesort 的情况:
Explain性能分析(三)——Extra_第4张图片

优化后,不再出现filesort的情况:

Explain性能分析(三)——Extra_第5张图片

查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。

2、Using temporary

使了用临时表保存中间结果,MySQL 在对查询结果排序时使用临时表。常见于排序 order by 和分组查询 group by。
优化前:
Explain性能分析(三)——Extra_第6张图片

优化后:
Explain性能分析(三)——Extra_第7张图片

3、Using index
Using index 代表表示相应的 select 操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错! 如果同时出现 using where,表明索引被用来执行索引键值的查找;如果没有同时出现 using where,表明索引只是 用来读取数据而非利用索引执行查找。 利用索引进行了排序或分组。

4、Using where
表明了where过滤。

5、Using join buffer
使用了连接缓存。
在这里插入图片描述

6、impossible where
where 子句的值总是 false,不能用来获取任何元组。
在这里插入图片描述

7、 select tables optimized away

在没有 GROUPBY 子句的情况下,基于索引优化 MIN/MAX 操作或者对于 MyISAM 存储引擎优化 COUNT(*)操 作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

在 innodb 中:
Explain性能分析(三)——Extra_第8张图片

在 Myisam 中:
在这里插入图片描述

结束

优化涉及到的技术点大概就是这些,我们会在生产中遇到各种各样的问题,所以实际操作的时候要立足于已经熟悉的方法去灵活的运用。有时候会遇到一些不能优化的sql语句,那怎么办呢?sql不能优化能不能换个思路从其他方面下手去优化呢?这个就需要跟据经验来判定了。

你可能感兴趣的:(MySQL,mysql性能分析,Explain返回参数解析)