mysql B+树层高计算《嘀嗒出行面试》

本文需要有mysql底层知识做铺垫

****mysql默认page大小为16K,这个可以调整,但是必须是4的倍数,因为操作系统每次和硬盘交互数据取的就是4K的块

1、分析b+树非叶子节点情况 ,假定一个表用int类型作为主键,占用4个字节,而指针大小在InnoDB源码中设置为6字节,一共10个字节,根节点一页就能存放16K/10 约为1600个指针

满编的B+树一层能存放的指针数据为1600*1600 约为256W条数据,二层大约为4亿数据。

此时B+树高度为4,因为有叶子节点的存在。假定数据表一行实际数据为1k大小(一行数据差不多就是那么大吧,估摸着),叶子结点每一页(page)大概可以放16条数据。所以最终能够放进去的数据为4亿*16,大约64亿行。此时,int主键已经超过最大范围。而且每次查询数据走索引的时候需要经过4次io。所以建议将数据约束在三层树结构中,根节点+一层非叶子节点+二层非叶子节点+三层数据节点。按一条数据1k长度,可存储行数为256W*16 约为 4000w 左右。所以int型主键建议将数据行数约束在4000w以内。超过该界限将会增加一次io。

2、分析b+树非叶子节点情况 ,假定一个表用bigint作为主键 ,占用8个字节,加上指针的6个字节一用14个字节,用16k 16384/14约为1170。那么可以算出一棵高度为2的B+树,能存放1170*16=18720条这样的数据记录。高度为3 1170*1170*16=21902400左右,高度为4的时候 大概是256亿条数据(这些数据大约需要占24T 的硬盘大小 =  =!千万别用自己的电脑试)。所以将bigint型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL B树是一种多路搜索树,用于在数据库中快速地索引和检索数据。它是一种平衡树,每个非叶子节点最多包含m个子节点,其中m为阶数。具体回答如下: MySQL B树的特点有以下几点: 1. 多路搜索树:B树的非叶子节点可以拥有多个子节点,这样可以大幅减少层数,提高搜索效率。 2. 平衡树:B树的每个节点从根节点到叶子节点的路径长度相等,这样可以保持树的平衡,避免出现极端情况导致搜索效率下降。 3. 顺序存储:B树的节点通过顺序存储在磁盘上,这样可以提高IO效率,减少磁盘读写次数。 4. 自平衡:插入或删除一个节点后,B树会通过旋转、分裂或合并等操作重新平衡,保持树的平衡性。 5. 提供快速的索引和检索:通过B树,可以快速地定位到所需数据的位置,减少了遍历的时间。 对于MySQL面试题中关于B树的问题,可能会有以下几种考察角度: 1. 数据库索引:B树在数据库中广泛应用于索引的实现,可以通过B树迅速地定位到所需数据的位置。 2. 插入和删除操作:B树的自平衡特性使得插入和删除操作的时间复杂度为O(logn),保证了高效的修改操作。 3. 阶数的选择:阶数m的选择会影响B树的节点个数和树的高度,进而影响查询效率和内存占用,需要根据实际应用场景进行合理选择。 4. B+树和B-树:MySQL中还存在B+树和B-树等变种,可以对其进行介绍和比较。 总结来说,MySQL B树是一种用于数据库索引的多路搜索平衡树,通过自平衡、顺序存储等特性,提供快速的索引和检索功能。理解B树的原理和应用场景对于数据库快速查询和修改操作非常重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值