一颗高度为3的B+树到底能存多少数据呢
发布于 2022-06-03 00:44
要回答这个问题,首先要知道B+树的结构是怎样的,存了什么数据,怎么存的,这些东西占多大等。先新建个表
CREATE TABLE IF NOT EXISTS `person`(
`id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
InnoDB的页结构
在InnoDB中,索引默认使用的数据结构为B+树,而B+树里的每个节点都是一个页,默认的页大小为16KB。
非叶子节点存的是索引值以及页的偏移量,而叶子节点上存放的则是完整的每行记录
大概认识了页里面存了什么,占多大空间,就可以估计能存放多少条数据了
B+树能存多少数据
非叶子结点能存多少数据
页默认16KB
File Header、Page Header等一共占102个字节
Infimum + Supremum分别占13个字节
记录头占5个字节
id占为int,占4个字节
页目录的偏移量占4个字节
所以,非叶子节点能存多少条索引记录呢
非叶子节点能存放的索引记录
= (页大小 - File Header - Page Header - ...) / ( 主键 + 页偏移量 + 下一条记录的偏移量)
= (16KB - 128B) / (5B + 4B + 4B)
= 16256 / 13
= 1250 条
2.叶子结点能存多少数据
变长列表占1个字节
null标志位忽略
记录头占5个字节
id占为int,占4个字节
name为VARCHAR,编码为UTF8,为了好算,所有行记录我都只用两个中文,那就是 2 * 3B = 6个字节
事务ID列占6个字节
回滚指针列占7个字节
叶子节点能存放的数据记录
= (页大小 - File Header - Page Header - ...) / ( 主键 + 字段 + 下一条记录的偏移量)
= (16KB - 128B) / (1B + 5B + 4B + 6B + 6B + 7B)
= 16256 / 29
= 560 条
3.高为3的B+树能存多少行记录
根节点能放1250条索引记录
第二层能放1250 * 1250 = 1,562,500条索引记录
叶子节点 1250 * 1250 * 560 = 875,000,000条数据记录,八亿多条数据
也就是说,假如我的表里面只有id和name这两个字段的话,高为3的B+树能存八亿多条数据记录
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材