mysql的应用概述_MySQL系列(二) InnoDB的应用技术概述

8 插入缓冲

在InnoDB中,主键是唯一的行标识。因此,插入聚集索引一般都是顺序的,不需要磁盘的随机读取。不过非聚集索引其插入和索引都是随机的。

当然,B+树的特性决定了非聚集索引的插入的离散性。因为数据页所在的叶子节点是按照逻辑顺序离散存放的。

InnoDB存储引擎开创性地设计了Insert Buffer(插入缓冲),对于非聚集索引的插入或更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则插入到缓冲池中的非聚集索引页;若不在,则先放入到一个Insert Buffer对象中,好似欺骗。

数据库这个非聚集的索引没有直接插到叶子节点,只是存放在另一个位置。然后再以一定的频率和情况进行插入 Insert Buffer 和辅助索引页子节点的merge(合并)操作,通常能将多个插入合并到一个操作中(因为在一个索引页中),这就大大提高了对于非聚集索引插入的性能。

然而Insert Buffer的使用需要同时满足以下两个条件:

索引是辅助索引(secondary index)

索引不是唯一(unique)的

当满足以上两个条件时,InnoDB存储引擎会使用 Insert Buffer,这样就能提高插入操作的性能了。不过考虑这种情况:

应用程序进行大量的插入操作,这些都涉及了不唯一的非聚集索引,也就是使用了Insert Buffer。若此时MySQL数据库发生了宕机,这时势必有大量的Insert Buffer并没有合并到实际的非聚集索引中去。因此这时恢复可能需要很长的时间,在极端情况下甚至需要几个小时。

辅助索引不能是唯一的,因为在插入缓冲时,数据库并不去查找索引页来判断插入的记录的唯一性。如果去查找肯定又会有离散读取的情况发生,从而导致Insert buffer 失去了意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值