MySQL 三层 B+ 树能存多少数据?
MySQL 三层 B+ 树能存多少数据?
MySQL 的 B+ 树索引结构广泛用于存储引擎(如 InnoDB)中,用于实现高效的查询。B+ 树的高度和每一层的节点数量直接影响其存储能力。以下是计算三层 B+ 树能存储的数据量的过程。
B+ 树的存储结构概述
节点大小:
在 InnoDB 中,B+ 树的每个节点(页)大小通常是 16KB。索引项大小:
每个索引项的大小取决于主键和指针的大小,假设主键为 8 字节,指针为 6 字节,则每个索引项的大小约为 14 字节。分支因子:
每个非叶子节点可以存储的指针数量(分支因子)大约为:
分支因子 = 节点大小 / 单个索引项大小 = 16KB / 14B ≈ 1170。叶子节点:
叶子节点存储实际的数据行指针,其数量由节点大小和数据行指针大小决定。
三层 B+ 树的计算
B+ 树的存储能力主要取决于叶子节点的数量,三层 B+ 树的存储数据量可以按以下公式计算:
第一层(根节点):
根节点最多存储 1170 个指针,指向第二层的节点。第二层(非叶子节点):
每个节点存储 1170 个指针,总共可指向 1170 × 1170 = 1,368,900 个叶子节点。第三层(叶子节点):
每个叶子节点存储实际的数据行指针。如果每行数据为 1KB,则每个叶子节点最多存储 16 行数据。
因此,三层 B+ 树能存储的总数据量为:
数据行总数 = 1170 × 1170 × 16 = 18,974,400 行。
假设更大的行数据
- 如果每行数据大小减小,比如每行仅占 0.5KB,则一个叶子节点可以存储 32 行数据。
- 重新计算后,三层 B+ 树最多可以存储:
数据行总数 = 1170 × 1170 × 32 = 37,948,800 行。
如果每行数据更大,比如占用 4KB,则一个叶子节点仅能存储 4 行数据,总行数会相应减少。
总结
在 MySQL 的三层 B+ 树中,具体能存储的数据量取决于以下因素:
- 页大小(通常为 16KB)。
- 每行数据大小(行数据越大,可存储的数据行越少)。
- 索引项大小(由主键长度和指针长度决定)。
典型情况下,三层 B+ 树可以存储约 1 千万到几千万行数据。对于更大的数据集,B+ 树的高度可能会增加,但通常 MySQL 的 B+ 树高度不会超过 4 层。
MySQL 三层 B+ 树能存多少数据?的更多相关文章
- B+树能存多少数据?
B+树能存多少数据? 图 MySQL B+树示意图 InnoDB页的大小默认是16KB: 假设一条记录大小为1KB,则一个数据页中可以存16条数据(忽略页中的其他数据结构) 假设主键为int,又指针大 ...
- MySQL(四)InnoDB中一棵B+树能存多少行数据
一.InnoDB一棵B+树可以存放多少行数据?(约2千万) 我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛.在计算机中磁盘存储数据最小单元是扇区,一个扇 ...
- mysql一张表到底能存多少数据?
前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...
- 面试题:InnoDB中一棵B+树能存多少行数据?
阅读本文大概需要 5 分钟. 作者:李平 | 来源:个人博客 一.InnoDB 一棵 B+ 树可以存放多少行数据? InnoDB 一棵 B+ 树可以存放多少行数据? 这个问题的简单回答是:约 2 千万 ...
- B-树和B+树的应用:数据搜索和数据库索引
B-树和B+树的应用:数据搜索和数据库索引 B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每 ...
- MySQL的B树索引与索引优化
MySQL的MyISAM.InnoDB引擎默认均使用B+树索引(查询时都显示为"BTREE"),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引 ...
- MySQL 笔记整理(13) --为什么数据表删掉一半,表文件大小不变?
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 13) --为什么数据表删掉一半,表文件大小不变? 我们还是以MySQL ...
- MySQL索引-B+树(看完你就明白了)
索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据.索引最形象的比喻就是图书的目录了.注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这 ...
- MySQL用B+树做索引
索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整.本文就来从头到尾介绍下数据库的索引. 索引是一种数 ...
- MySQL学习(八)删除表数据
表空洞的产生 删除某个行数据 或删除某个页 如下图所示,这个删除过程只是标记了某行的位置为删除,假如此时在300与600之间插入了一行数据,那么 同理,当删除某个页时,该页就会被复用.所以当删 ...
随机推荐
- Kotlin:【定义类】field、计算属性、防态竞争条件
- 聊聊GRPO算法——从Open R1来看如何训练DeepSeek R1模型
概述 首发自个人公众号:阿郎小哥的随笔驿站 DeepSeek R1系列建议阅读之前的系列文章: 聊聊DeepSeek R1的一些总结 聊聊DeepSeek R1的开源复现库--Open R1之合成数据 ...
- SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
在SQL Server数据库中,统计信息更新(UPDATE STATISTICS)会被其它会话阻塞吗?统计信息更新(UPDATE STATISTICS)会引起其它会话阻塞吗?在回答这两个问题前,我们必 ...
- cgroup与systemd: 通过src rpm获取systemd源代码,添加日志并使用rpmbuild重新打包
问题起源 服务跑在富容器中.容器使用init进程作为一号进程,然后用systemd管理所有service. 在做一次升级时,nginx启动脚本有更新,原来是root拉起,现在进行了去root改造,使用 ...
- 服务器vps测试脚本大全,新云linux综合工具箱-linux加速脚本 一键硬盘挂载
服务器vps测试脚本大全 一键更换yum脚本 一键优化shh卡顿 一键更换软件源 各种linux加速 BBR原版 bbrplus 魔改plus 锐速 脚本linux加速脚本 一键硬盘挂载 一键cc防御 ...
- MybatisPlus - [04] 分页
limit m,n.PageHelper.MyBatisPlus分页插件 001 || MybatisPlus分页插件 (1)引入maven依赖 <dependency> <grou ...
- 【Abaqus】*Solid Section定义复合材料
*SOLID SECTION 介绍 *solid section 用来定义单元的材料属性,材料方向等信息: solid (continuum) elements infinite elements a ...
- MySQL 8.0 语法记录
SQL又杂又烦,记不住,网上搜到的语句还未必正确.这里做一个Record 基本操作 数据库操作 数据表操作 create index [索引名] on [表名]([列名]); /* 以选定列为索引信息 ...
- GitFlow ⼯作流
前言 Git 是一个开源分布式版本控制系统,它可以很方便的帮我们记录文件的改动,就像下面一样: 我们可以很快的跳到文件改动的某一个版本(就像时空穿梭一样). Git 在程序开发中,作为一个源码管理系统 ...
- C# - 获取枚举描述 - 使用增量源生成器
前言 C# 获取枚举描述的方法有很多, 常用的有通过 DescriptionAttribute 反射获取, 进阶的可以加上缓存机制, 减少反射的开销.今天我们还提供一种更加高效的方法,通过增量源生成器 ...