【MySQL】MySQL执行计划的type类型

MySQL的执行计划中,type有以下几种类型:

  1. system:表只有一行记录(等于系统表),这是一个特殊情况。
  2. const:表示通过索引一次就找到了,const用于比较primary key或者unique索引。因为只匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。
  3. eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描。
  4. ref:非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回的行数和使用的索引的列数一样。区别是它可能会找到多个符合条件的行。
  5. fulltext:全文索引检索。
  6. ref_or_null:与ref类似,但增加了对NULL值的匹配。
  7. index_merge:表示使用了索引合并优化方法。
  8. unique_subquery:InnoDB特有,子查询中的查询结果字段与外层查询的主键字段一致时,可以使用unique_subquery优化。
  9. index_subquery:InnoDB特有,子查询中的查询结果字段与外层查询的非主键字段一致时,可以使用index_subquery优化。
  10. range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。一般就是在使用between、>、<、>=、<=、in等操作符时,加上索引就会触发range。
  11. index:Full Index Scan,index与ALL区别为index类型只遍历索引树。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说虽然all全表扫描,但是数据文件可能比索引文件大很多,所以不一定比全索引扫描慢)
  12. ALL:Full Table Scan,遍历全表以找到匹配的行。
  13. index_to_join:在5.6版本以前叫做index merge。这个类型的连接算法只适用于Nested-Loop的连接方式。但是如果是多表连接查询的话,执行计划会优选Nested-Loop的方式去执行查询。
  14. possible_keys:可能使用的索引列表。如果为空,则没有可用的索引。在这种情况下,可以通过检查WHERE子句来提高性能。您还可以尝试添加索引来提高性能。
  15. key:实际使用的索引。如果为NULL,则表示没有使用索引。很少的情况下,如果MySQL估计全表扫描比使用索引快,则会选择全表扫描而不使用索引。

你可能感兴趣的:(mysql,数据库)