问题
假设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查询压力也会急剧增加。