面试题:innoDB主键索引的B+tree高度有多高呢?

假设: 一行数据大小为1K(1024字节),一页可以存放16行这样的数据,一页的大小 16 * 1024 = 16384 字节,

InnoDB指针占用6个字节的空间,主键即使为bigint也只占用8个字节的空间

设索引(键)的数量为 n ,键的总占用空间 : 键的数量 * 单个键的占用空间 = n * 8

根据B+tree树的特性,指针的数量比当前节点键的数量多1个,所以

指针的总占用空间 = ( 主键的数量 + 1 ) * 单个指针占用空间 = (n + 1) * 6

计算n 的值 : 每个页所占用的空间为 16384

列出方程

n * 8 + (n + 1) * 6 = 16384

14n = 16384 - 1

n = 16383 / 14

n ≈ 1170

现在已经 计算出键的数量为 1170 , 加1 就是指针的数量 1171

一个指针对应一页,一页可以有16行数据,1171 * 16 = 18736 行数据,得出当B+树高度为2的时候可以存储18736 行数据

高度为3的时候呢?

  • 高度为2的时候所有的叶子节点只有一个共同的索引节点,高度为3的时候原来的叶子节点变为了索引节点,

  • 他们每个都会有1171个指针(把单个索引节点看做根,就可以在根据高度为2的时每个索引的指针数量,就可以求出他们每个最大拥有的指针数量),指向自己拥有的叶子节点

  • 在高度为2的时候有1171个叶子节点,所以现在会有1171个索引节点,由于B+树的值都是存储在叶子节点的,所以这里的1171个索引节点是指叶子节点的父节点,并没有算上整棵树的根节点

  • 一个索引节点可以存储 18736 行数据,现在有1171个索引节点,所以 18736 * 1171 就可以得出,高度为3的时候可以存储 21939856 行数据,约等于219W行数据

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值