MySQL中Innodb引擎的索引更新策略

说到索引更新,就一定要先了解MySQL的buffer pool和change buffer。buffer pool是主存中用来存储常用数据和索引的一块空间,它通过LRU(Least recently used)algorithm来替换页(其实和操作系统中的“页”的概念是相似的,都是从磁盘拉到主存中的一块数据),buffer pool的存在,即缓存的存在都是为了减少I/O操作,因为I/O操作太费时间了(毕竟不是由CPU直接管辖的)。
change pool是缓冲区的一部分(如下图所示),它用来负责二级索引(也就是非聚集索引)的更新。当数据增、删、改之后,不在buffer pool中的二级索引页的改变会先被缓存在change buffer中,当读操作来临时,相关的索引页被加载到buffer pool中,并与change buffer中的改变合并,再在空闲时异步更新到磁盘中。
在这里插入图片描述
接下来,我们将整个数据更新的流程梳理一下。
(1)当用户执行更新操作时,MySQL先去看该数据页在不在buffer pool中;
(2)如果在且是二级索引,则直接更新buffer pool中相关的数据页(索引包含在数据页的user record部分);
(3)如果在且是唯一索引,则需要先判定更新操作是否会破坏数据的唯一性,如果不会的话就更新相关数据页;
(4)如果所需数据页不在buffer pool中且是唯一索引,则需要立即从磁盘中加载相关数据页到buffer pool中,并判断更新操作是否会破坏数据的唯一性,如果不会的话就更新相关数据页;
(5)如果不在且请求的是二级索引,则需要使用到change pool来进一步减少I/O操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值