MySQL高级---索引优化分析(Explain性能分析 二)

7、key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。key_len字段能够帮你检查是否充分的利用上了索引。ken_len越长,说明索引使用的越充分。

MySQL高级---索引优化分析(Explain性能分析 二)_第1张图片
MySQL高级---索引优化分析(Explain性能分析 二)_第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

MySQL高级---索引优化分析(Explain性能分析 二)_第3张图片

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

在这里插入图片描述

9、rows:rows列显示MySQL认为它执行查询时必须检查的行数。越少越好!

在这里插入图片描述

10、Extra:其他的额外重要的信息。

1、Using filesort

说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引

完成的排序操作称为“文件排序”。
出现filesort的情况:
MySQL高级---索引优化分析(Explain性能分析 二)_第4张图片
优化后,不再出现filesort的情况:
MySQL高级---索引优化分析(Explain性能分析 二)_第5张图片
2、Using temporary

使了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序orderby和分组查询group

优化前:
MySQL高级---索引优化分析(Explain性能分析 二)_第6张图片
优化后:
MySQL高级---索引优化分析(Explain性能分析 二)_第7张图片

3、Using index

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

4、Using where
表明使用了where过滤。

5、Using join buffer
在这里插入图片描述
6、impossible where
where子句的值总是false,不能用来获取任何元组。
在这里插入图片描述
7、select tables optimized away
在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

在innodb中:
MySQL高级---索引优化分析(Explain性能分析 二)_第8张图片
在Myisam中:
在这里插入图片描述

你可能感兴趣的:(Mysql数据库)