MySQL 三层 B+ 树能存多少数据?

news/2025/2/21 7:07:30

1. B+树的基本结构

  • 节点大小:在InnoDB中,B+树的每个节点(页)大小通常是16KB。
  • 索引项大小:每个索引项的大小取决于主键和指针的大小。假设主键为8字节,指针为6字节,则每个索引项的大小约为14字节。
  • 分支因子:每个非叶子节点可以存储的指针数量(分支因子)大约为:分支因子=单个索引项大小节点大小=14B16KB≈1170

2. 三层B+树的存储能力

  • 第一层(根节点):根节点最多存储1170个指针,指向第二层的节点。
  • 第二层(非叶子节点):每个节点存储1170个指针,总共可指向1170 × 1170 = 1,368,900个叶子节点。
  • 第三层(叶子节点):每个叶子节点存储实际的数据行指针。如果每行数据为1KB,则每个叶子节点最多存储16行数据。

因此,三层B+树能存储的总数据量为:

数据行总数=1170×1170×16=21,902,400行

3. 不同行数据大小的影响

  • 每行数据大小减小:如果每行数据大小减小,比如每行仅占0.5KB,则一个叶子节点可以存储32行数据。重新计算后,三层B+树最多可以存储:数据行总数=1170×1170×32=37,948,800行
  • 每行数据更大:如果每行数据更大,比如占用4KB,则一个叶子节点仅能存储4行数据,总行数会相应减少。

4. 实际应用中的数据量

在实际应用中,三层B+树通常可以存储约1千万到几千万行数据。具体数据量取决于以下因素:

  • 页大小(通常为16KB)。
  • 每行数据大小(行数据越大,可存储的数据行越少)。
  • 索引项大小(由主键长度和指针长度决定)。

5. 总结

在MySQL的三层B+树中,具体能存储的数据量取决于页大小、每行数据大小和索引项大小。典型情况下,三层B+树可以存储约1千万到几千万行数据。对于更大的数据集,B+树的高度可能会增加,但通常MySQL的B+树高度不会超过4层。


http://www.niftyadmin.cn/n/5860424.html

相关文章

leetcode_位运算 190.颠倒二进制位

190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位。 1. 字符串 class Solution:# param n, an integer# return an integerdef reverseBits(self, n):res "" # 创建一个保存结果的空字符串for b in str(bin(n))[2:]:# 遍历n的二进制数res b res # 把每…

线程与线程:从入门到放弃

引言 在计算机科学中,**线程**是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,这些线程共享进程的内存空间和资源,但每个线程拥有独立的执行栈和程序计数器。 本…

JUC并发—8.并发安全集合二

大纲 1.JDK 1.7的HashMap的死循环与数据丢失 2.ConcurrentHashMap的并发安全 3.ConcurrentHashMap的设计介绍 4.ConcurrentHashMap的put操作流程 5.ConcurrentHashMap的Node数组初始化 6.ConcurrentHashMap对Hash冲突的处理 7.ConcurrentHashMap的并发扩容机制 8.Concu…

第1章大型互联网公司的基础架构——1.11 消息中间件技术

消息队列(Message Queue)是分布式系统中最重要的中间件之一,在服务架构设计中被广泛使用。 1.11.1 通信模式与用途 消息中间件构建了这样的通信模式: 一条消息由生产者创建,并被投递到存放消息的队列中;…

使用Python和正则表达式爬取网页中的URL数据

在数据抓取和网络爬虫开发中,提取网页中的URL是一个常见的需求。无论是用于构建网站地图、分析链接结构,还是进行内容聚合,能够高效地从HTML文档中提取URL都是一个重要的技能。Python作为一种强大的编程语言,结合其正则表达式模块…

ubuntu22.04使用minikube安装k8s

ubuntu使用minikube安装k8s 准备工作安装步骤安装docker安装kubectl安装minikube导入相关镜像安装相关指令启动minikube服务 安装dashboard组件导入相关镜像创建服务账号安装组件本体验证安装结果 准备工作 下载离线安装包,安装包内容如下: 软件说明ki…

windows使用命令解压jar包,替换里面的文件。并重新打包成jar包,解决Failed to get nested archive for entry

有一个jar包,需要替换里面的文件,使用解压工具打开项目,然后找到对应的子包,再次打开,然后进行手工替换重新压缩成jar包后,发现启动服务报错Failed to get nested archive for entry。 使用下面的命令可实…

jmeter接口测试(一)

一、什么是接口测试?为什么要做接口测试? 接口测试:就是测试项目和项目之间,模块和模块之间,组件和组件之间的数据交互和权限鉴定(鉴权)。 前后端分离:前后端联调。mock模拟&#x…