mysql中每页最少两条数据_MySQL源码:为什么INNODB数据页面中最少存储2条记录?...

写在前面:我一直认为数据库中已经规定,一个页面中至少要存储2条记录,但是前几天碰到一个问题:为什么INNODB数据页面中最少存储2条记录?一下子把我问住了,知道是这样,但从没有问过自己这是为什么,所以我一直想这个问题,现在刨根问底,终于知道为什么了,下面就把这个问题的原因说一下吧。

在INNODB中,底层数据的存储是通过B+树实现的,一个页面的大小一般设置为16K,不同页面之间通过父子、兄弟挂链,形成B+树结构。

为了说明为什么一个数据页面至少要存储2条记录,下面就先简单叙述一下B树的一个记录插入过程,下面图示中的方框用来表示一个页面,左边和右边的小方框表示最小虚记录及最大虚记录,下面是表示内节点中的KEY指针,每一个KEY都会有一个指针指向其叶子节点的位置,对于叶子节点,这个是没有的。下面假设插入数据的顺序是2-1-3-1.5。

假设一个页面中可以存储3条记录,下就面插入过程图示说明:

2fbe6e0a853f401088612da749624923.jpg

现在根页面已经插入满了,此时如果再继续插入,则需要将根页面分裂(根节点的分裂),此时创建一个新的叶子节点,然后将原根页面的全部记录复制到新页面中,新根页面的最小虚记录要指向原来的根页面(新叶子节点),同时将原根页面中的记录全部删除,结果是这样的:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值