MySQL中的InnoDB一次update执行

MySQL的InnoDB引擎在执行UPDATE时,并非直接修改磁盘数据,而是先修改内存中的数据页。此过程与SELECT类似,先加载数据页。执行器在找到数据后负责更新,并涉及undolog、redolog、binlog三个日志更新。脏页会在适当时候被刷回磁盘。change buffer用于缓存未在内存的数据页修改,但对唯一索引的更新可能增加额外开销。
摘要由CSDN通过智能技术生成

先摆好一次select执行的图。

为什么标题是update却要摆放select执行的图?
首先要知道update修改数据并不是直接修改表中的数据,而是修改在内存中的数据页。而内存中的数据页是由执行器调用引擎接口加载到内存中的,这一部分跟select是一模一样的,所以直接复用一次select执行时的图。

与select的不同在什么地方?

执行器再找到数据后还有负责更新。这个更新就是修改再内存中的数据页。

除此之外还涉及到3个日志的更新,即undolog、redolog、binlog。

一个更新大致流程就结束了。

在内存修改后的数据页变成了与磁盘上的数据页不一样的数据页,这个数据页叫做脏页。

把脏页刷到磁盘的过程,称为刷脏。

一定要加载到内存再修改?

要说的是前面讲到的buffer pool中存在一个change buffer的缓存,而内存中没有需要的数据页,可以将这个修改缓存在change buffer中,当以后有查询加载了这个数据页时,再应用这个修改。

启用change buffer是不是一定就是好的?</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值