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

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

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

操作系统层面

数据都是存储在磁盘中的,而磁盘中的数据都是以最新单位扇区进行分割。一个扇区的大小是512字节,也就是0.5KB
文件系统块中的块通常是8个扇区构成,所以一个文件系统块大概是4K,而存储引擎中最小存储单元是页,一个页是4个文件块组成,也就是16K
在这里插入图片描述

InnoDB引擎

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+树就可以。


http://www.kler.cn/a/148917.html

相关文章:

  • Vue3.js - 一文看懂Vuex
  • 批量重命名Excel文件并排序
  • arcgis做buffer
  • 【算法一周目】双指针(2)
  • 学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • SpringBoot+VUE3前后端分离-【支付宝支付】
  • k8s中pod的hostport端口突然无法访问故障处理
  • Scrum敏捷开发流程及支撑工具
  • 【深入解析git和gdb:版本控制与调试利器的终极指南】
  • Linux 基础-常用的命令和搭建 Java 部署环境
  • 使用vue脚手架创建vue项目
  • Linux 安装 Minio 配置 HTTPS
  • LangChain 14 SequencialChain链接不同的组件
  • 19 Go的时间日期
  • c 数组简介
  • 【c++|SDL】开始使用之---demo
  • Peter算法小课堂—高精度减法
  • <HarmonyOS第一课>从简单的页面开始 【课后考核】
  • nvm:node版本控制工具
  • 【Electron】上下键切换消息
  • 【Rust】快速教程——自定义类型、数字转枚举、Cargo运行
  • ArrayList与顺序表的简单理解
  • JSP forEach标签varStatus使用讲解(了解即可 基本用不到)
  • Day 12 周日和周一
  • 【LeetCode】挑战100天 Day12(热题+面试经典150题)