0%

MySQL单表访问方式

Access method

版本5.7

system

当表中只有一条记录并且该表使用的存储引擎的统计数据是精确的,比如MyISAM、Memory,那么对该表的访问方法就是system

const

当根据主键或唯一二级索引列与常数进行等值匹配时,对单表的访问方法就const

ref

当通过普通的二级索引列与常量进行等值匹配时来查询某个表,那么对该表的访问方法就可能是ref

ref_or_null

当对普通二级索引进行等值匹配查询,该索引列的值也可以是NULL值时,那么对该表的访问方法就可能是ref_or_null

range

如果使用索引获取某些范围区间的记录,那么就可能使用到range访问方法。

index

当我们可以使用索引覆盖,但需要扫描全部的索引记录时,该表的访问方法就是index

eq_ref

在连接查询时,如果被驱动表是通过主键或者唯一二级索引列等值匹配的方式进行访问的(如果该主键或者唯一二级索引是联合索引的话,所有的索引列都必须进行等值比较),则对该被驱动表的访问方法就是eq_ref

index_merge

在一般情况下执行一个查询时最多只会用到单个二级索引,特殊情况下也可能在一个查询中使用到多个二级索引,这种使用到多个索引来完成一次查询的执行方法称之为index_merge,具体的合并方式分为以下三种

  • Intersection:交集,某个查询可以使用多个二级索引,将从多个二级索引中查询到的结果取交集。
    • 二级索引列是等值匹配的情况,对于联合索引来说,在联合索引中的每个列都必须等值匹配,不能出现只匹配部分列的情况。
    • 主键列可以是范围匹配。
  • Union:并集,适用于使用不同索引的搜索条件之间使用OR连接起来的情况。
    • 二级索引列是等值匹配的情况,对于联合索引来说,在联合索引中的每个列都必须等值匹配,不能出现只出现匹配部分列的情况。
    • 主键列可以是范围匹配。
    • 使用Intersection索引合并的搜索条件。
  • Sort-Union:先按照二级索引记录的主键值进行排序,之后按照Union索引合并方式执行的方式称之为Sort-Union索引合并,显然Sort-Union索引合并比单纯的Union索引合并多了一步对二级索引记录的主键值排序的过程。

unique_subquery

类似于两表连接中被驱动表的eq_ref访问方法,unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS子查询,而且子查询可以使用到主键进行等值匹配的话,那么该子查询执行计划的type列的值就是unique_subquery

index_subquery

unique_subquery类似,只不过访问子查询中的表时使用的是普通的索引。

all

全表扫描方式。

fulltext

全文检索时会使用该方式。