访问方法的概念

MySQL执行查询语句的方式称为访问方法或者访问类型。

10.2 const

通过主键或者唯一二级索引列月常熟的等值比较来定位一条记录的访问方法定义为const(常数级别的,代价是可以忽略不计的)。
如果主键或者唯一二级索引列由多个列构成,则只有在索引列中的每一个列都与常数进行等值比较时,const方法才有效。
对于唯一二级索引列来说,在查询列为NULL的时候情况特殊,不能用const访问方法来执行。

image.png

10.3 ref

由于普通二级索引并不限制索引列值的唯一性,所以可能记录有多条,如果扫描区间的记录较少,则回表代价还是比较低的。
搜索条件为耳机索引列与常数进行等值比较,形成的扫描区间为单点扫描区间,采用二级索引来执行查询的访问方法称为ref
image.png

ref访问方法比const方法差了一点

  • 在二级索引列允许存储NULL时,无论是普通索引还是唯一索引,他们并不限制NULL的数量,所以最多使用ref方法查询 is null,不能使用const方法
  • 联合索引,只要最左边连续的列时与常数进行等值比较就可以采用ref方法

10.4 ref_or_null

ref_or_null就是比ref多扫描了一些值为NULL的二级索引记录

image.png

10.5 range

使用索引执行查询时,对应的扫描区间为若干个单点扫描区间或者范围扫描区间 称为range(仅包含一个单点扫描区间的访问方法不能称为range方法,负无穷到正无穷的扫描区间也不能称为range访问方法)

10.6 index

使用联合索引执行查询,并且不用执行回表操作,扫描全部的二级索引记录比直接扫描全部的聚簇索引记录的成本小很多,称为index访问方法
如果在全表扫描时,添加了order by 主键的子句,也会被认为是index方法

10.7 all

最直接的方式就是全表扫描了。

10.8.2 索引合并

1. Intersection索引合并

Intersection是交集的意思,Intersection索引合并是指对从不同的索引中扫描到的记录的id值取交集,只为这些id值执行回表操作。

  • 从两个有序集中取交集比从两个无需集合中取交集要容易得多
  • 如果获取到的id值是有序的话,根据这些id执行回表操作的时候就不是进行单纯的随机IO,提高效率

2. Union 索引合并

Union是并集的意思,Union索引合并是指,对从不同的索引中扫描到的记录的id取并集,然后回表

  • 从两个有序集合执行去重操作比从两个无序集合中执行去重操作容易一些
  • 如果获取到的id值是有序的话,根据这些id执行回表操作的时候就不是进行单纯的随机IO,提高效率

3. Sort-Union索引合并

Union索引合并必须保证从各个索引中扫描到的记录的主键值是有序的。

先将从各个索引中扫描到的记录的主键值进行排序,再按照执行Union索引合并的方式执行查询,这就是Sort-Union

最后修改:2022 年 06 月 25 日
如果觉得我的文章对你有用,请随意赞赏