单表2000万要考虑分表?三层B+树大概能存多少数据量?

理论上来说,只要磁盘空间够,存多少都可以,但是随着数据量的增多,查询效率会下降的,根据实际经验来说,单表抗2000万数据量,通过索引查询问题不大,那么这个数字确实是一个经验值,但是他背后是不是有一定的计算逻辑呢?如何计算出这个数据的呢?

前言

我们都知道,随着表中数据量的增加,B+树的高度会逐渐增加。如果 B+树的高度过高,每次查询需要经过较多的层级,会导致查询性能下降。因此,B+树的高度限制是单表存储量的一个瓶颈。对于B+树的高度限制,一般建议将B+树的高度控制在3到4层以内,以获得更快的查询性能。

B+树的非叶子结点存储主键和指向子结点的指针,叶子结点存储实际的数据行。

估算

很容易知道:

能存多少条记录=叶子结点数量*每个叶子结点能存的数量

(估算,实际情况每个结点能存储的数量并不一定相同)

叶子结点数量

一个根结点的存储量是16kb,根结点作为非叶子结点,只需要存储主键值和指针。假设是个bigint类型的主键,也就是8字节,指针默认大小6字节

那么这个根节点能存16*1024/(8+6)≈1170.2857个关键字,而每个二层结点又能扩展出1170个子结点,三层B+树的叶子结点数大概就等于1170*1170=1368900

叶子结点能存的行数

假设单行数据量为1kb,那么一个叶子结点能存16条记录

估算结果

假设单条数据是1kb的情况下,那么3层b+树最终可存储的数据量为

1170*1170*16=21902400

即两千万!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值