在java面试的过程当中,很多人应该都遇到和MySQL explain字段相关的问题,你知道MySQL explain有哪些字段吗?tpye都有哪些类型呢?下面一起来看看具体的回答吧!
1、Extra字段
Not exists-在某一些左连接当中,MySQL Query Optimizer通过改变原有Query的组成而使用的优化方法,能够部分减少数据访问次数;
Extra-查询当中每一步实现的额外细节信息;
No tables-Query语句当中使用FROM DUAL或者是不包括任何FROM子句;
Distinct-查找distinct 值。在mysql找到了第一条匹配的结果的时候,将会停止这个值的查询,转为后面其他值查询;
Using where with pushed condition-一个在NDBCluster存储引擎当中出现的信息,一定要通过打开Condition Pushdown 优化功能才可以被使用,控制参数engine_condition_pushdown;
Full scan on NULL key-子查询当中的一种优化方式;
Using where-假如,不读取表的所有数据,又或者不是仅仅通过索引就能够获取所有需要的数据,那么就会出现Using where信息;
Range checked for each record (index map: N)-在MySQL Query Optimizer没有发现好的能够使用的索引的时候,假如,发现前面表的列值已知部分索引可以使用,对前面表的每个行组合,MySQL检查是否能够使用range或者是index_merge访问方法来索取行;
Using temporary-在MySQL的某一些操作当中,一定要使用临时表的时候,在Extra信息当中就会出现Using temporary;
SELECT tables optimized away-在Query当中没有GROUP BY操作的时候,在使用某些聚合函数来访问存在索引的某个字段的时候,MySQL Query Optimizer会通过索引直接一次定位到所需的数据行完成整个查询;
Using index for group-by-数据访问和Using index相同,所需数据只要读取索引,Query中使用GROUP BY或者是DISTINCT子句的时候,假如分组字段也在索引当中,Extra中的信息就会是 Using index for group-by;
Using filesort-Query中含有ORDER BY操作,并且,不能够利用索引完成排序操作时,MySQL Query Optimizer 不得不选择相应的排序算法来实现;
Using index-所需数据只要在Index就能够全部获得,不要再到表中取数据;
2、XPLAIN列
Extra-MYSQL怎样解析查询的额外信息;
table-显示这一行的数据是关于哪张表的;
rows-MYSQL认为一定要检查的用来返回请求数据的行数;
type-列显示连接使用了何种类型;
ref-显示索引的哪一列被使用了,假如,可能的话,会是一个常数;
possible_keys-显示可能应用在这张表中的索引;
key_len-使用索引的长度;
key-实际使用的索引;
3、Type列
unique_subquery-子查询当中的返回结果字段组合是主键或唯一约束;
Type-告诉我们对表使用的访问方式;
system-系统表;
all-全表扫描;
ref_or_null-和ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询;
const-读常量;
ref-Join语句当中被驱动表索引引用的查询;
eq_ref-最多的话就只会有一条匹配结果,通常都是通过主键或者是唯一键索引来访问;
rang-索引范围扫描;
fulltext-进行全文索引检索;
index_subquery-子查询当中的返回结果字段组合是一个索引(或者是索引组合),可是,不是一个主键或者是唯一索引;
index-全索引扫描;
index_merge-查询当中同时使用两个(或者是更多)索引,之后,对索引结果进行合并,再读取表数据;
MySQL explain字段的一些知识你都了解了吗?请继续的关注奇Q工具网吧,更多MySQL常见问题可以帮助你解答哦!
推荐阅读: