MySQL3层b+tree可以存多少数据

 

如图,一颗三层b+tree, 高度为3,则经过3次io可以查询到数据:

1.第一次io读取根页数据,假如数据填充满一整页,并且为聚簇索引,非叶子节点key值是主键值为bigint类型,占用8个字节,指针占用6个字节,非叶子节点一个元素大小是8+6=14字节,innodb最小存储单位是页,一页大小16kb,1kb=1024b,每次查询最多的数据元素个数是16*1024b/8b 约等于1170。

2.在第一次io读取到内存,匹配到第二次io要读取的地址,第二次io也是读取非叶子节点,同理读取最多元素个数也是1170。

3.在第二次io后获取到叶子节点地址,叶子节点存放的是一条整条数据记录,大小按照1kb估算,16kb/1kb = 16.

以前我疑惑的点是根节点为什么就一页呢,如果数据很多两页三页不行么,思索后答案是根节点只能有一页,或者说叫根页,如果数据很多构建树形结构时候应该增加更多的非叶子节点或者增加新的高度,而不是说搞两个根页,因为MySQL 用b+tree规则就是树高度几层就io几次课查到数据,假如有两个根节点不符合逻辑,总要有树根啊。

 MySQL3层b+tree可以存多少数据,在本文预设的背景条件下,结论是1170*1179*16=21902400,两千多万条数据了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值