MySQL的BKA_MySQL中的MRR和BKA

MRR优化的目的就是减少磁盘的随机访问,InnoDB由于聚集索引的特性,如果查询使用辅助索引,并且用到表中非索引列,那么需要回表读取数据做后续处理,过于随机的回表会伴随大量的随机IO。

而MRR的优化并不是通过辅助索引读取到数据就回表,而是通过范围扫描将数据存入read_rnd_buffer_size,然后对其按照primary key(Row ID)排序,最后使用排序好的数据进行顺序回表,因为Innodb 中叶子节点数据是按照primary key(row ID)进行排列的,这样就转换随机IO为顺序IO了,对于瓶颈为IO的SQL查询语句将带来极大的性能提升。

BKA(Batched Key Access)结合MRR特性进行高效Join操作。

1.将外循环表中相关列放入Join Buffer中。

2.批量的将Key(索引键值)发送到MRR接口。

3.MRR通过收到的key,根据其对应的primary key (row id )进行排序,然后再根据排序后的primary key(row id)顺序的读取聚集索引,得到需要的列数据。

4.返回结果集给客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值