mysql 数据库索引b+树深度问题

常见面试题:mysql数据库一颗b+树深度大概是多少?

这要从b+树的结构和数据库索引大小去分析问题,索引字段占内存大小,指针占内存大小(6字节 6Byte,或者6B)

1、先看看b+树结构

下面看一颗树

第一行中,1,320为索引数据排序后的数据范围,这里叫键值key,1-30,320- 32 对应的是页指针,指向下一页

* b+树非叶子节点存放的都是key+nest指针。叶子节点存放数据

*在mysql索引b+树中,非叶子节点键值数=子节点数

2、计算

在mysql索引中索引页默认大小16k

SHOW VARIABLES LIKE 'innodb_page_size';

一页可以理解成一个节点(非叶子节点或者叶子节点)

先假设一个变量

每行数据量大小1K

索引字段Int:4字节(4byte)

bigint:8byte

verchar:一个字符占3byte

那么一页可以最多有多少子节点呢(bigint而言)指针在InnoDB中为6字节

16384/(8+6) = 1170

在叶子节点中每页16K,每行数据1K,那么就是16条记录

所以b+树深度和数据库数量的关系

1170(n-1)次方 * 16

深度=3的b+树

1170 *1170 *16 = 21902400(2千万数据)

所以一般数据库b+深度也就3-5层

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值