EXPLAIN列的解释:
id:查询的序列号
select_type:select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。
table:所访问的数据库中表的名称。
type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:
system (系统表)> const(读常量)> eq_ref (最多一条匹配结果,通常是通过主键访问)>ref(被驱动表索引引用) > fulltext(全文索引检索) >ref_or_null(带空值的索引查询) > index_merge(合并索引结果集) > unique_subquery(子查询中返回的字段是唯一组合或索引) >index_subquery(子查询返回的是索引,但非主键) >range(索引范围扫描) > index(全索引扫描) >ALL (全表扫描)
一般来说,得保证查询至少达到range级别,最好能达到ref。 all是最坏的情况,这种情况表示没有使用索引。
possible_keys :
指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。
key:
显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。
key_len:
显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。
ref:
显示哪个字段或常数与key一起被使用。
rows:
这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。
Extra:
如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。 如果是where used,就是使用上了where限制。 如果是impossible where,则表示通过收集到的统计信息判断出不可能存在的结果。除此之外,Extra还有下面可能的一些值:
Using filesort:表示包含orderby且无法使用索引进行排序操作时,不得不使用相应的排序算法实现。
using temporary:使用临时表,常用于order by 和 group by。
select tables optimized way:使用聚合函数,并且mysql进行了快速定位。通常是MAX,MIN,COUNT(*)等函数。