为什么建议MySQL在2000W条左右记录分表

本文探讨了MySQL在2000万条记录左右分表的建议,基于B+树的数据存储结构。解释了B+树的层级与数据页的关系,分析了不同数据行大小如何影响存储容量。内容指出,超过3层B+树可能导致性能下降,建议复杂记录的单表存储量远小于2000万条以保持高效性能。
摘要由CSDN通过智能技术生成

为什么建议MySQL在2000W条左右记录分表?这个数量问题并不是绝对的,这是一个相对的数量。在回答这个问题前我们应该先了解MySQL底层是用的什么数据结构来进行数据存储的。
MySQL底层采用的B+树进行的数据存储
在这里插入图片描述
InnoDB存储引擎最小储存单元是页,一页大小就是16k。B+树叶子存的是数据,内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页中找到需要的数据.

我们假设主键ID为bigint类型,长度为8字节(int类型,一个int就是32位,4字节),而指针大小在InnoDB源码中设置为6字节,所以就是 8+6=14 字节,16k/14B =16 * 1024B/14B = 1170,2层的话既能代表1170 * 1170个地址。

我们如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录数 = 16k/1k =16,所以3层的B+树存储的记录在1170 * 1170 * 16 = 21902400,大概2千万条记录。

为什么不用4层B+树?
使用4层B+树需要磁盘IO次数增加,数据多了但是影响力了性能,这也是建议数据记录过千万条分表的原因。

这只是个理论的数值,叶子节点的数据量大小不同,3层B+数能存储的条数也不同。那么假如一条数据记录的大小不是1kb呢?还是建议,最多存满3层B+树不是1kb,会让3层B+树的最大数据记录数量发生变化比如一条数据记录5kb 那么一个数据页只能存16kb/5kb≈3条记录。此时3层B+树的最大记录数量为
total=3 * 1170 * 1170=4,106,700条,410w条记录,远小于2000w条也就是说对于复杂数据记录的单表,建议的最大存储记录要小于甚至远小于2000w条.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里藍天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值