MYSQL EXPLAIN字段含义
explain包含id、select_type、table、type、possible_keys、key、key_len、ref、rows、extra字段
id
id列的编号是select的序列号,有几个select就有几个id,并且id的顺序是按select出现的顺序增长的。
select_type
select_type表示对应行是简单还是复杂的查询。 1. simple:简单查询 2. primary:复杂查询中最外层的select 3. subquery:包含在select中的子查询(不在from子句中) 4. derived:包含在from子句中的子查询 5. union:在union中的第二个和随后的select 6. union result:从union临时表检索结果的select
table
这一列表示explain的一行正在访问哪张表。
type
这一列表示关联类型或访问类型,即mysql决定如何查找表中的行 性能优先级依次从最优到最差分别为:system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all 1.null:mysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。 2.const、system:mysql能对查询的某部分进行优化并将其转化成一个常量(可以看show warnings的结果)。 3.eq_ref:primary key 或unique key索引的所有部分被连接使用,最多只会返回一条符合条件的记录。 4.ref:相比eq_ref,不实用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要喝某个值相比较,可能会找到符合条件的行。 5.ref_or_null:类似ref,但是可以搜索值为null的行。 6.index_merge:表示使用了索引合并的优化方法。 7.range:范围扫描通常出现在in(),between,>,<,>=等操作中。 8.index:和all一样,不同就是mysql只需扫描索引树,这通常比all快一些。 9.all:全表扫描,意味着mysql需要从头到尾去查找所需要的行,通常情况下这需要增加索引来进行优化了。
possible_keys
这一列显示查询可能使用哪些索引来查找
key
这一列显示mysql实际采用哪个索引来优化对该表的访问
key_len
这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的那些列
ref
在key列记录的索引中,表查找值所用到的列或常量,常见的有:const,func,null,字段名
rows
mysql估计要读取并检测的行数,注意这个不是结果集里的行数。
extra
展示的是额外信息 1.distinct:一但mysql找到了与行相联合和匹配的行,就不再搜索了。 2.using index:这发生在对表的请求列都是同一索引的部分的时候,返回的列数据只使用了索引中的信息,而没有再去访问表中的行记录。(是性能高的表现) 3.using where:mysql服务器将在存储引擎检索行后再进行过滤。就是先读取整行数据,再按where条件进行检查,符合就留下,不符合就丢弃。 4.using temporary:mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索引来优化。 5.using filesort:mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息。这种情况下一般也是要考虑使用索引来优化的。
https://www.cnblogs.com/teach/p/14651041.html
如果这篇文章对你有帮助的话,评论或推荐下吧!(转载请注明原作者!)