【数据库】聊聊一颗B+树 可以存储多少数据

我们知道数据库使用的数据结构是B+树,但是B+树可以存储多少数据呢,在面试中也是经常会问的问题,所以我们从根上理解这个问题。

操作系统层面

数据都是存储在磁盘中的,而磁盘中的数据都是以最新单位扇区进行分割。一个扇区的大小是512字节,也就是0.5KB

文件系统块中的块通常是8个扇区构成,所以一个文件系统块大概是4K,而存储引擎中最小存储单元是页,一个页是4个文件块组成,也就是16K

InnoDB引擎

java 复制代码
show variables like 'innodb_page_size';

从中可以看到,InnoDB的存储引擎一页是16KB,因为本身是用B+树存储数据的,除了存储数据本身,还需要维护索引组织表。

查询过程大概如下:

1.根据索引找到对应位置的根页,因为根页在表空间中是固定的,所以说也就是page 3

2.找到根页后,通过二分查找的方式,找到id=3 在page4中

3.根据p4的指引,查找对应索引page 4的数据,找到数据ID=3的数据。

所以你看数据库有多强大,通过对外抽象成SQL进行操作,而内部维护事务、SQL解析、连接、存储、查询等功能。

一颗树可以存放多少行数据

假设一个主键为bigint类型,长度是8字节,而指针大小在源码中是6字节,那么一条数据就是14字节。一页16KB 16384/14 1170条数据。一个高度为2的B+树 可以存放 1170 * 16 = 18720条数据。

一个高度为3的B+树 可以存放 1170 * 1170 * 16 = 21902400条数据。

所以千万级别的数据,页只需要3层B+树就可以。

相关推荐
大模型码小白7 分钟前
数据可视化:AI 生成 HTML5 动态交互式数据图表
前端·数据库·人工智能·深度学习·机器学习·信息可视化·html5
风哥2号8 分钟前
数据库教程FGMT26‑1‑GoldenGate数据库容灾迁移01(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库·oracle
颜颜yan_21 分钟前
Firebird 鸿蒙 PC 适配全记录:打通数据库内核、Qt 管理端与原生维护工具
数据库·qt·harmonyos
风哥2号21 分钟前
数据库教程FGMT25‑Oracle多租户架构CDB与PDB运维管理
数据库·oracle
程序猿乐锅25 分钟前
【黑马点评 | 第一篇】从 Session 到 Redis+Token 的改造与拦截器实现
数据库·redis·缓存
南京兴帝文化传媒有限公司32 分钟前
基于地图平台的本地商户信息优化:药店夜间服务标注与客户转化实操
前端·javascript·数据库·人工智能·geo 优化·geo优化避坑·ai搜索获客
u01090535937 分钟前
NAS远程访问内网穿透方案之使用神卓N600实现不限速方法
服务器·网络·数据库
野生技术架构师44 分钟前
Redis Hot Key 与 Big Key:危害、发现与解决方案
数据库·redis·缓存
YSL0701241 小时前
线性表和顺序表
数据结构
杨云龙UP1 小时前
DB2 HADR 主备架构活动日志参数优化操作手册
linux·运维·服务器·数据库·db2·db2 hadr·日志参数调整