以下排序从最优到最差:
system:表内只有一行数据。
const:最多只会有一条记录匹配,常用于主键或者唯一索引为条件查询。
eq_ref:当连接使用的索引为主键和唯一时会出现。
ref:使用普通索引 = 或 <=> 运算符进行比较将会出现。
fulltext:使用全文索引。
ref_or_null:跟 ref 类型类似,只是增加了 null 值的判断,实际用的不多。语句为 where name = ‘kaka’ and name is null,name 为普通索引。
index_merge:查询语句使用了俩个以上的索引,常见在使用 and、or 会出现,官方文档将此类型放在 ref_or_null 之后,但是在很多的情况下由于读取索引过多性能有可能还不如 range。
unique_subquery:用于 where 中的 in 查询,完全替换子查询,效率更高。语句为 value IN (SELECT primary_key FROM single_table WHERE some_expr)
index_subquery:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或唯一索引。
range:索引范围查询,常见于使用 =,<>,>,>=,<,<=,IS NULL,<=>,BETWEEN,IN() 或者 like 等运算符的查询中。
index:索引全表扫描,把索引从头到尾扫一遍。
all:全表扫描,性能最差。