小工具知识网

当前位置: 首页 > 行业知识 > MySQL InnoDB引擎——三层B+树可以存储多少数据量

行业知识

MySQL InnoDB引擎——三层B+树可以存储多少数据量

2026-10-21 16:30:43 来源:互联网转载

先说结论:

3层B+���大概可以存:

()
  • 主键为bigint:约2000w
  • 主键为int:约4000w

    *备注:

    在《阿里开发手册》中建议,单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,就不必要在创建表时就分库分表。 

    ()

    计算

    在Innodb存储引擎里面,最小存储单元是页,而一个页的大小默认是16KB。 一个节点(叶子节点或非叶子节点)的大小就是一页。

    在MySQL Innodb存储引擎中的B+树的一个节点大小为“1页”,也就是16k。也即代表B+树的每个节点可以存16KB数据。

    为什么设计成这个大小?解释一下:

    之所以设置为一页,是因为对于大部分业务,一页就足够了。
    (一条数据必须是放在一个节点中,不能拆开到多个节点存储。而一般一条数据大概1KByte,那么一页能容纳的大概16条,即一个节点容纳不止一条数据,而且是多达16条!!所以大小采用最小存储单元足够用了~)

    非叶子节点:

    ps:指针是用来指向下一个“节点”的。

    • 假设主键类型为bigint,占用8Byte,指针可以设置为占用6Byte,总共14Byte。这样就可以算出一个非叶子节点大概可以存放16KByte/14Byte=1170个“主键+指针”的组合。
    • 假设主键类型为int,占用4Byte,指针可以设置为占用6Byte,总共10Byte。这样就可以算出一个非叶子节点大概可以存放16KByte/10Byte≈1600个“主键+指针”的组合。

      叶子节点:

      在B+树中,真正的数据是只存储在叶子节点中的。

      这里我们假设我们的一行数据大小是1K,那么我们一个叶子节点就可以存16KByte/10Byte=16条(行)数据。

      由此,可以推算出公式:

      • 两层总数 = 非叶子节点(根) * 叶子节点。
      • 三层总数 = 非叶子节点(根) * 非叶子节点 * 叶子节点。

        主键为bigint(约2000w):

        • 2层B+树的话:可以存放1170个*16条=18720条(行)数据。
        • 3层B+树的话:可以存放1170个*1170个*16条=21902400条(行)数据。

          主键为int(约4000w):

          • 2层B+树的话:可以存放1600个*16条=25600条(行)数据。
          • 3层B+树的话:可以存放1600个*1600个*16条=40960000条(行)数据。

            所以三层B+树也就差不多2000w条或4000w条数据。


            参考:面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?_3层b+树能存储多少数据_不平衡的叉叉树的博客-CSDN博客 

上一篇:服务器内存增大怎么办?

下一篇:怎么获取电脑服务器?