吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 752|回复: 7
收起左侧

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

[复制链接]
xuzhenkang 发表于 2023-11-12 20:52

一个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次数也会更少。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
redsuke + 1 + 1 涨知识了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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
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?

  疯狂的python
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表