explain用法
Posted zhaolei1996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了explain用法相关的知识,希望对你有一定的参考价值。
key_len:用到索引字段的字节数
变长字段需要额外的2个字节,固定长度字段不需要额外的字节。而null都需要1个字节的额外空间,所以索引字段最好不要为NULL,因为NULL让统计更加复杂,并且需要额外一个字节的存储空间。
varchar(n)其中n是指字符个数,它所占的字节数和使用的编码相关,对于变长字段不管你实际存储的是多大的字符数,但是在key_len的计算中只认n的值
type:它提供了判断查询是否高效的重要依据依据. 通过 type
字段, 我们判断此次查询是 全表扫描
还是 索引扫描
等,有以下的枚举值:
1、system
: 表中只有一条数据. 这个类型是特殊的 const
类型.
2、const
: 针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可.
3、eq_ref
: 此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 =
, 查询效率较高.
4、ref
: 此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了 最左前缀
规则索引的查询
5、range
: 表示使用索引范围查询, 通过索引字段范围获取表中部分数据记录. 这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中
6、index
: 表示全索引扫描(full index scan), 和 ALL 类型类似, 只不过 ALL 类型是全表扫描, 而 index 类型则仅仅扫描所有的索引, 而不扫描数据.
7、ALL: 表示全表扫描, 这个类型的查询是性能最差的查询之一
性能从上往下依次变差
Extra:
1、Using filesort:当 Extra中有 Using filesort
时, 表示 mysql 需额外的排序操作, 不能通过索引顺序达到排序效果. 一般有 Using filesort
, 都建议优化去掉, 因为这样的查询 CPU 资源消耗大.
2、Using index 覆盖索引扫描", 表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错
3、Using temporary 查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.
https://segmentfault.com/a/1190000008131735
以上是关于explain用法的主要内容,如果未能解决你的问题,请参考以下文章