const
一般认为通过主键或者唯一二级索引列来定位一条记录的访问方法定义为:const。const表示常数级别,代价是可以忽略不计的。
不过这种 const 访问方法只能在主键列或者唯一二级索引列和一个常数进行等值比较时才 有效,如果主键或者唯一二级索引是由多个列构成的话,索引中的每一个列都需要与常数进行等值比较,这个 const 访问方法才有效(这是因为只有该索引中全部列都采用等值比较才可以定位唯一的一条记录)。
执行过程:
聚簇索引(主键索引)
唯一二级索引:
ref
一般把搜索条件为二级索引列与常数等值比较,采用二级索引来执行查询的访问方法叫:ref
当二级索引列值为null的情况:
不论是普通的二级索引,还是唯一二级索引,它们的索引列对包含 NULL 值的数量并不限制,所以我们采用 key IS NULL 这种形式的搜索条件最多只能使用 ref 的访问方法,而不是 const 的访问方法。
对于某个包含多个索引列的二级索引来说,只要是最左边的连续索引列是与常数的等值比较就可能采用 ref 的访问方法,比方说下边这几个查询:
- SELECT * FROM single_table WHERE key_part1 = 'god like';
- SELECT * FROM single_table WHERE key_part1 = 'god like' AND key_part2 = 'legendary';
- SELECT * FROM single_table WHERE key_part1 = 'god like' AND key_part2 = 'legendary' AND key_part3 = 'penta kill';
但是如果最左边的连续索引列并不全部是等值比较的话,它的访问方法就不能称为 ref 了,比方说这样:
SELECT * FROM single_table WHERE key_part1 = 'god like' AND key_part2 > 'legendary';
执行过程:
ref_or_null
当使用二级索引而不是全表扫描的方式执行该查询时,这种类型的查询使用的访问方法就称为 ref_or_null
range
一般把利用索引进行范围匹配的访问方法称为:range。这里所说的索引可以是聚簇索引也可以是二级索引。
index
一般认为采用遍历二级索引记录的访问方式称为:index。
all
一般认为使用全表扫描执行查询的访问方式称之为: all 。