B+树层数计算(面试官直呼内行)

简介: 首先搞清楚一个常识,我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是 4k

B+树结构简述

跟其它tree结构一样,根节点只有一个,根节点可以为叶子节点或者非叶子节点,B+树的非叶子节点(包括根节点)可以有多个子节点,它的非叶子节点仅保存索引列和指针,不保存具体行记录;

啥是根节点

最上面那个就叫根节点

啥是非叶子节点

不是叶子节点的节点都叫非叶子节点


啥是叶子节点

最下面那些最终节点就叫叶子节点


如何计算层数

首先搞清楚一个常识,我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛


在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是 4k


而对于我们的 InnoDB 存储引擎也有自己的最小储存单元——页(Page),一个页的默认大小是 16K,page可以储存指针,也可以储存行记录,其中指针指向下一个page的地址


好,知道这个,计算层数就简单了,我们先假设有两层,第一层为非叶子节点,保存指针,第二层为叶子节点,保存具体行记录


那么两层高度的b+树能存储的数量 = 根节点指针数*每个指针对应第二层的行记录数


ok建议你先捋捋,不着急


根节点指针数

怕你没认真看上面,我再说一遍,B+树的非叶子节点仅保存索引字段和指针,假设主键为bigint类型,InnoDB 的bigint占用8个字节,指针占用6个字节,8+6=14,所以我们可以得出,一个page能存放的指针个数为16k/(8+6)约等于1170


每个指针对应第二层的行记录数

再来说说一个page能存储多少条行记录,常规的互联网项目单条行记录大小约为1k,那么一个page能存储的行记录数为16k/1k=16


所以一个2层高的b+树能存储的行记录数大约为1170*16=18720

3层为1170*1170*16约等于2190w


ok我话说完


相关文章
|
7月前
|
JavaScript
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。(二)
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
7月前
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。(一)
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
存储 算法 安全
手写HashMap,快手面试官直呼内行
快手一面,手写HashMap,卒……
231 0
手写HashMap,快手面试官直呼内行
|
SQL NoSQL Java
分布式锁实现思路(面试官直呼内行)
目前java中的synchronized或者juc包中的锁都是针对单个jvm的,分布式环境下就无能为力,只能用分布式锁;
120 0
|
28天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
52 1
|
2月前
|
存储 关系型数据库 MySQL
2024年Java秋招面试必看的 | MySQL调优面试题
随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。
250 0
2024年Java秋招面试必看的 | MySQL调优面试题
|
2月前
|
存储 算法 Java
铁子,你还记得这些吗----Java基础【拓展面试常问题型】
铁子,你还记得这些吗----Java基础【拓展面试常问题型】
46 1
|
2月前
|
NoSQL Java 关系型数据库
凭借Java开发进阶面试秘籍(核心版)逆流而上
最近参加了面试或者身边有朋友在面试的兄弟有没有发现,现在的面试不仅会问八股文,还会考察框架、项目实战、算法数据结构等等,需要准备的越来越多。 其实面试的时候,并不是要求你所有的知识点都会,而是关键的问题答到点子上!这份《Java 开发进阶面试秘籍(核心版)》由 P8 面试官整体把控,目前已经更新了 30 万字! 资料中涵盖了一线大厂、中小厂面试真题,毕竟真题都是技术领域最经典的基础知识和经验沉淀的汇总,非常有必要学习掌握!双重 buff 叠加,offer 接到手软~ 点击此处取,这可能是你到目前为止领取的最具含金量的一份资料! 整套资料涵盖:Spring、Spring
|
2月前
|
存储 缓存 Java
面试官:什么是Java内存模型?
面试官:什么是Java内存模型?
112 0
面试官:什么是Java内存模型?
|
1月前
|
消息中间件 NoSQL 网络协议
Java面试知识点复习​_kaic
Java面试知识点复习​_kaic