【数据库】B+树存数据

B+树 的一个节点大小=innodb的一页=4个操作系统页(一页4kb)=16kb(系统规定,不用纠结)

叶子节点只存储数据(索引值和链表指针占不考虑)

非叶子节点存储(索引值+指针)=8b(以bigint类型为例)+6b(指针大小为6个字节)=14b

假设一行数据=1kb(1kb大概有几千上万个字符,所以按1kb算一行数据不算少了)

那么按一个索引值来算:

叶子节点可以存放=1*16=16 条数据

非叶子节点(索引值+指针)=一个节点的数据/14b=16kb/14b=16*1024 / 14 = 1170 个 (索引值+指针)

如果树高度为2,可以存入多少条数据

因为高度为2,就2层,根节点就一个节点,一个节点有1170个指针,相当于有1170个叶子节点,一个叶子节点有16条数据,那么

结果=1770*16=18724 条数据

如果树高度为3,可以存入多少条数据

因为每个节点都有1170个指针,那么3层就是二层中所有的1170个指针也各自对应1170个指针,那么

结果=1170*1170 * 16 = 21902400 相当于2千多万

也就是说以bigint 为主键,按一行1kb为例,2千多万条数据,查3次

所以在 InnoDB 中 B+ 树高度一般为 1-3 层,它就能满足千万级的数据存储。

为什么 MySQL 的索引要使用 B+ 树而不是其它树形结构?比如 B 树?

答:因为 B 树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致 IO 操作变多,查询性能变低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值