Mysql的B+树高度计算

问题

假设B+树的高度是2,一行数据的记录大小是1K,主键ID是int类型。
问:该B+树存放的总记录数?

知识点

Mysql的默认存储引擎是Innodb
Innodb的最小存储单位是页
一页大小等于16K
B+树的叶子节点存放数据,内部节点存储键值和指针

在高度为2的B+树情况下,
B+树存放总记录=单个叶子节点的记录行数 * 根节点指针数 

解决过程

1)计算单个叶子节点的记录行数
单个页的大小是16K
一行数据大小是1K
所以行数=16K / 1K =16

2)计算根节点指针数
一个int类型的字符长度是4字节
在Innodb中设置中一个指针长度是4字节
共计8个字节
所以根节点指针数=16KB / 8B = 16 * 1024B / 8B = 2048
根据公式:B+树存放总记录=2048 * 16 = 32768
综上所述:高度为2且满足上述条件的B+树存放记录32768条

补充说明:
如果B+树高度为3,B+树存放记录为

2048 * 2048 * 16 = 67108864

由此可见,B+树高度超过3时,磁盘IO迅速增大,SQL查询压力也会急剧增加。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值