首页 > 技术文章 > mysql 查询优化 ~explain解读之type的解读

danhuangpai 2018-02-26 16:40 原文

一 简介:今天咱们来聊聊explain中type的相关解读

二 类型:

    system: 表中只有一条数据. 这个类型是特殊的 const 类型.

 const: 针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可

   eq_ref: 此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果. 并且查询的比较操作通常是 =, 查询效率较高. 关键字:连接字段 主键或者唯一性索引

   ref : 此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了 最左前缀 规则索引的查询. 关键字:非唯一性索引

   ref_or_null:与ref方法类似,只是增加了null值的比较。

   range: 表示使用索引范围查询, 通过索引字段范围获取表中部分数据记录. 这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中.

   index: 表示全索引扫描(full index scan), 关键字:查询字段和条件都是索引本身

   index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引.效率不是很高 关键字:索引合并

   unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值

   index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。

   fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引

   all:这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。

三 效率总结

   1 依次从好到差: 1 system,const,index  , range,index_merge,ALL 单独查询 

                                2 eq_ref,ref,ref_or_null all 多表join 查询

                                3  index_subquery   unique_subquery  子查询

   2  index_merge之外,其他的type只可以用到一个索引

  

 

推荐阅读