【转】mysql之explain详解(分析索引的最佳使用)

 1、type类型查询速度:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
就type进行详细的介绍:
System,const,eq_ref,ref,range,index,all
all : 即全表扫描
index : 按索引次序扫描,先读索引,再读实际的行,结果还是全表扫描,主要优点是避免了排序。因为索引是排好的。
range:以范围的形式扫描。(in、between、>、<、>=、<=)
ref:非唯一索引访问(只有普通索引)
eq_ref:使用唯一索引查找(主键或唯一索引)
const:常量查询
system:系统查询
 

2、在这里对explain的各个字段进行详细的分析,来帮助大家分析自己所写的sql是否最佳的使用了索引。

select_type:查询类型是简单型还是复杂型

table:表名

type:使用的索引类型

possible_keys:可能用到的索引
key:实际用到的索引
key_len:索引字段最大可能使用长度
ref:索引对应的字段名
rows:需要扫描的行数
Extra:显示扩展的其他信息,主要包括:【Using indexUsing where、Using temporary、Using filesort

Using index
此查询使用了覆盖索引(Covering Index),即通过索引就能返回结果,无需访问表。若没显示"Using index"表示读取了表数据。
Using where
从存储引擎收到行后,再检查此行是否符合 where 句的条件。

Using filesort
若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort 。
select * from a order by id;
对于没有索引的列进行order by 就会出现filesort(尽量避免order by 字段没有建立索引)

 

posted @ 2019-03-14 09:52  PHP急先锋  阅读(1449)  评论(0编辑  收藏  举报