Mysql 性能优化Explain详解 (2)

ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回匹配某个单独值的行,然而,它可能会找到多个符合条件的行,索引他应该属于查找和扫描的混合体

range:只检索给定范围的行,使用一个索引来选择行。
key列显示使用了哪个索引,一般就是在你的where语句中出现了between、<、>、in等的查询
这种范围扫描索引扫描比全表扫描要好,因为它只需要开始于索引的某一点,面结束另一点,不用扫描全部索引。

index: Full Index Scan,index与ALL区别为index类型只遍历索引树,这通常比ALL快,因为索引文件通常比数据文件小,

也就是说虽然ALL和Index都是读全表,但Index是从索引中读取的,而ALL都是从磁盘中读的。

ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行。NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

 

五、possible_keys
显示可能应用在这张表中的索引,一个或多个。
查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。
简单来说,mysql认为这条查询可能用到哪些索引。

 

六、Key

key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中

如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

 

七、key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)

同样的查询结果夏,不损失精确性的情况下,长度越短越好 。

 

八、ref

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

 

九、rows

 估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

 

十、Extra

该字段包含MySQL解决查询的详细信息,有以下几种情况:

Using filesort:

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

Mysql中无法利用索引完成的排序操作称为“文件排序”,如果出现,要优化此查询。

简单来说:Mysql并未按照你建立的索引去查找,

 

Using temporary:

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

 

Using index:

表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。

如果同时出现using where,表明索引被用于来执行索引键值的查找。

如果没有同时出现wing where,表明索引用来读取数据而非执行查找动作。

 

Using where :

表明使用了where过滤

 

Using join buffer:

使用了连接缓存

 

impossible where:

where子句中的值总是false,不能用来获取任何元组

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwxsw.html