什么是访问方法

访问方法(access method)的概念

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

const

通过主键或者唯一二级索引列来定位一条记录

ref

通过普通的二级索引列与常数进行等值比较定位一条记录

ref_or_null

ref的基础上再匹配为null的列

range

通过索引列进行范围匹配某个或某些值

此处所说的使用索引进行范围匹配中的 `索引` 可以是聚簇索引,也可以是二级索引。

index

遍历二级索引记录的执行方式称之为:index

有一个联合索引 uk_a_b_c,现在执行这条查询语句

select a,b,c from table where b = 'xxx'

这个查询显然违背了最左匹配原则,但是可以走索引覆盖,但是需要从头到尾遍历这个联合索引

all

全表扫描执行查询的方式称之为:all

注意事项

索引合并

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

Intersection合并

某个查询可以使用多个二级索引,将从多个二级索引中查询到的主键ID取交集

比方说下边这个查询:

SELECT * FROM single_table WHERE key1 = 'a' AND key3 = 'b';

假设这个查询使用Intersection合并的方式执行的话,那这个过程就是这样的:

  • idx_key1二级索引对应的B+树中取出key1 = 'a'的相关记录。
  • idx_key3二级索引对应的B+树中取出key3 = 'b'的相关记录。
  • 二级索引的记录都是由索引列 + 主键构成的,所以我们可以计算出这两个结果集中id值的交集。
  • 按照上一步生成的id值列表进行回表操作,也就是从聚簇索引中把指定id值的完整用户记录取出来,返回给用户。

思考:为什么不取单个索引进行回表操作

查询二级索引是顺序IO,回表是随机IO,应该尽量避免随机IO

Union合并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值