xuzhenkang 发表于 2023-11-12 20:52

在MySQL中,一个B+树中大概能存放多少条索引记录?

# 一个B+树中大概能存放多少条索引记录?

> 计算机在存储数据的时候,最小存储单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)最小单元是块,一个块的大小是 4KB。InnoDB 引擎存储数据的时候,是以页为单位的,每个数据页的大小默认是 16KB,即四个块。

真实环境中一个页存放的记录数量是非常大的(默认 16KB ),假设指针与键值,即record_type,next_record,其他信息等,看做 10 个字节,即 10B;假设每条记录占 1KB 的空间。在InnoDB引擎中,聚簇索引的情况下,叶子结点每页可以存 16KB ÷ 1KB = 16条记录。非叶子节点,每页可以存 16KB ÷ 10B = 1600 条指针(页号)。注意:非聚簇索引,不存储整条数据哦。

- 如果B+树只有1层,也就是只有1个用于存放用户记录的节点,最多能存放 16 条记录。
- 如果B+树有2层,非叶子节点只有1个,第一层可以存 16KB ÷ 10B = 1600 条指针(页号),第二层,即叶子层,每个叶子节点可以存16条记录,所以最多能存放 1600×16=25600 条记录。
- 如果B+树有3层,最多能存放 1600×1600×16=40960000 条记录。
- 如果存储千万级别的数据,只需要三层就够了


B+树的非叶子节点不存储用户记录,只存储目录记录,相对B树每个节点可以存储更多的记录,树的高度会更矮胖,IO次数也会更少。

FruitBaby 发表于 2023-11-12 22:38

2000w左右,一个三层的b+树存满的话

cc54cc 发表于 2023-11-12 23:34

FruitBaby 发表于 2023-11-12 22:38
2000w左右,一个三层的b+树存满的话

个人觉得是不是在文本文档中加入一些识别标志,会更好处理一点。

sai609 发表于 2023-11-13 08:19

为啥不直接用python?

njbb888 发表于 2023-11-13 08:56

sai609 发表于 2023-11-13 08:19
为啥不直接用python?

讲的数据结构,和python有什么关系?

xiajin 发表于 2023-11-13 09:03

sai609 发表于 2023-11-13 08:19
为啥不直接用python?

讲的话题不在一个频道上

Vvvvvoid 发表于 2023-11-13 10:59

sai609 发表于 2023-11-13 08:19
为啥不直接用python?

大哥你在说什么呀 ..

神龙涅 发表于 2023-11-13 11:44

sai609 发表于 2023-11-13 08:19
为啥不直接用python?

:wwqwq疯狂的python
页: [1]
查看完整版本: 在MySQL中,一个B+树中大概能存放多少条索引记录?