当前位置: 首页 > article >正文

单表2000万要考虑分表?三层B+树大概能存多少数据量?

理论上来说,只要磁盘空间够,存多少都可以,但是随着数据量的增多,查询效率会下降的,根据实际经验来说,单表抗2000万数据量,通过索引查询问题不大,那么这个数字确实是一个经验值,但是他背后是不是有一定的计算逻辑呢?如何计算出这个数据的呢?

前言

我们都知道,随着表中数据量的增加,B+树的高度会逐渐增加。如果 B+树的高度过高,每次查询需要经过较多的层级,会导致查询性能下降。因此,B+树的高度限制是单表存储量的一个瓶颈。对于B+树的高度限制,一般建议将B+树的高度控制在3到4层以内,以获得更快的查询性能。

B+树的非叶子结点存储主键和指向子结点的指针,叶子结点存储实际的数据行。

估算

很容易知道:

能存多少条记录=叶子结点数量*每个叶子结点能存的数量

(估算,实际情况每个结点能存储的数量并不一定相同)

叶子结点数量

一个根结点的存储量是16kb,根结点作为非叶子结点,只需要存储主键值和指针。假设是个bigint类型的主键,也就是8字节,指针默认大小6字节

那么这个根节点能存16*1024/(8+6)≈1170.2857个关键字,而每个二层结点又能扩展出1170个子结点,三层B+树的叶子结点数大概就等于1170*1170=1368900

叶子结点能存的行数

假设单行数据量为1kb,那么一个叶子结点能存16条记录

估算结果

假设单条数据是1kb的情况下,那么3层b+树最终可存储的数据量为

1170*1170*16=21902400

即两千万!


http://www.kler.cn/news/342795.html

相关文章:

  • k8s、prometheus、grafana数据采集和展示的链路流程
  • Java Python 开发效率利器:IDEA、PyCharm 与 通义灵码深度融合
  • JavaEE中记录日志
  • 【论文阅读】Learning a Few-shot Embedding Model with Contrastive Learning
  • android广播实现PIN码设置
  • 禁止浏览器扩展插件自动更新(以EDGE和IDM为例)
  • Qt_软件添加版本信息
  • 诺贝尔物理学奖
  • 【计算机网络 - 基础问题】每日 3 题(三十五)
  • iOS--理解MVC与MVVM
  • Python编程:创意爱心表白代码集
  • 学习博客写作
  • 大语言模型(LLM)综述
  • Python和C++的差异在哪里
  • MySQL 篇-深入了解 InnoDB 引擎的逻辑存储结构、架构、事务原理、MVCC 原理分析(RC 级别、RR 级别)
  • Java基础(下)
  • C语言语法练习20题(变量、输入输出、表达式与顺序语句)
  • PyQt入门指南四 事件处理机制详解
  • 健康生活的重要性
  • 初级网络工程师之从入门到入狱(五)