Mysql的B+树高度计算

问题

假设B+树的高度是2,一行数据的记录大小是1K,主键ID是int类型。
问:该B+树存放的总记录数?

知识点

Mysql的默认存储引擎是Innodb
Innodb的最小存储单位是页
一页大小等于16K
B+树的叶子节点存放数据,内部节点存储键值和指针

在高度为2的B+树情况下,
B+树存放总记录=单个叶子节点的记录行数 * 根节点指针数 

解决过程

1)计算单个叶子节点的记录行数
单个页的大小是16K
一行数据大小是1K
所以行数=16K / 1K =16

2)计算根节点指针数
一个int类型的字符长度是4字节
在Innodb中设置中一个指针长度是4字节
共计8个字节
所以根节点指针数=16KB / 8B = 16 * 1024B / 8B = 2048
根据公式:B+树存放总记录=2048 * 16 = 32768
综上所述:高度为2且满足上述条件的B+树存放记录32768条

补充说明:
如果B+树高度为3,B+树存放记录为

2048 * 2048 * 16 = 67108864

由此可见,B+树高度超过3时,磁盘IO迅速增大,SQL查询压力也会急剧增加。

你可能感兴趣的:(MySQL,mysql,b树,数据库)