Mysql内核:INNODB存储引擎--《十一》Insert Buffer

11.2基本概念

innodb对于自增主键值得插入是顺序的,因此插入能有较高的插入性能。但在实际生产环境中,用户表的主键仅有并只能有一个,然后表中可能存在多个辅助索引。辅助索引根据类型在插入时可以分为比较顺序到的插入和随机的插入两种。比较顺序的插入可能是时间字段,随机的插入可能更为广泛。

innodb存储引擎insert buffer的设计思想是,在插入时首先判断插入的辅助索引叶子是否还在缓冲池中。若在则直接插入,否则将插入的记录放到insert buffer中,然后根据一些算法将insert buffer缓存的记录通过后台线程慢慢的合并回辅助索引页中。这样做好处:

  • 减少磁盘的离散读取
  • 将多次插入合并为一次操作

举例子,第一列为人名,第二列为page_no(实际上page_no并不是数据,在这里用来表示页号):
(‘huangweiyang’, 2), (‘licao’, 10), (‘gaomingxi’, 4), (‘lishuai’, 15), (‘hejiejie’, 2)

后面的列表示原先应插入的辅助索引的page_no,可以看到页的访问时无序的。然而当插入到insert buffer中,删除记录可能完全在一个页中,因此减少了李珊读取。在insert buffer中,,记录根据应插入辅助索引的叶子节点的page_no进行排序。排序完毕后,上述记录就会从insert buffer向辅助索引合并,比如(‘huangweiyang’)(‘hejiejie’)此时就可以批量合并了 :)

注意,insert buffer 只能缓存非唯一约束的索引。若是唯一索引,那么在插入时需要判断插入的记录是否唯一,这需要读取辅助索引页。这不就完蛋了,insert buffer不起作用喽!

11.3架构实现

11.3.1 存储结构

不用说,B+树!键值就是待插入到辅助索引页的page_no。B+树索引页的大小一样为16kb,内存同样使用缓冲池。

innodb存储引擎存在一个insert buffer bitmap页,用来追踪每个缓存页的剩余空间,当剩余空间小于某个阈值时,

占坑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值