可以通过查询语句查看:show Variables like 'innodb_page_size'

查询结果为16384字节。用1kb等于1024字节的方法可以计算出16384/1024=16kb,表示MySql数据库的默认页大小为16kb。

假设一行数据占用1kb的空间。但事实上,除了字段较多的宽表外,很多简单的表行记录都远远小于1kb的空间。这里我们使用最坏的情况,假设一行记录的大小为1kb。那么,一个16kb的页可以存储16行数据。

接下来我们先画一个只有两层高的B+树结构图。

假设第一层根节点有如下情况:索引1对应页指针地址10,索引5对应页指针地址30,索引8对应页指针地址50。

二级节点作为叶子节点,存储页面数据,大小为16kb。页数据中每行的记录大小为1kb。那么,一个叶子节点的一页可以存储16条数据。

现在我们知道一个叶子节点页可以存储16条数据,那么我们只需要知道根节点中存在多少个页地址指针,就可以通过“根节点页地址指针的数量*根节点页地址指针的数量”来计算。记录在单个叶节点中的行数”。

MySql的InnoDB的三层B+树可以存储大约2000万条数据的计算逻辑。

那么,根节点中可以存放多少个索引:页地址指针数据呢?

当节点大小为16kb时,我们只需要知道索引键值和页地址指针的大小之和。

据一些资料显示,在MySql数据库中,指针地址大小为6个字节。如果索引是bigint类型,则为8字节。两者合计为14字节。

接下来,通过下面的计算步骤,就可以计算出两层B+数可以存放多少条数据——的记录。

1、首先计算一个节点的字节大小:16kb * 1024=16384 字节。

2、16384字节/14字节=1170,也就是说根节点有1170个页地址指针,那么每个页地址指针指向的叶子节点可以存储16条数据。

3、然后根据“根节点页地址指针的数量*单个叶子节点的记录行数”,计算出1170*16=18720条记录。可见两层B+号可存储18720条记录。当然,这个数字也有出入。仅供参考。

MySql的InnoDB的三层B+树可以存储大约2000万条数据的计算逻辑。

既然我们知道两层B+数可以存储18720条数据,那我们是不是可以进一步用三层来计算呢?

简单画出三层B+数存储数据计算逻辑——

1、根节点最多有1170个指针;

2.说明第二层最多会有1170个子节点,同时每个子节点最多有1170个指针;

3、那么第三层叶子节点的数量可以通过“第二层最大节点数1170*每个节点最大指针数1170”来计算,即1170 * 1170

4、最后计算第三层所有叶子的数量*每个叶子节点存储的16条数据;

最后是1170 * 1170 * 16=21902400,大约是2000万条数据。

用户评论

无寒

哇,这个计算逻辑真是强大,之前一直以为InnoDB只能处理小量数据呢,2000万条数据量确实很可观。

    有15位网友表示赞同!

又落空

这个计算逻辑听起来好复杂,不过对于数据库来说,这种处理能力太重要了。

    有15位网友表示赞同!

身影

2000万条数据,我之前的项目里数据量还没这么夸张,但这个逻辑应该能帮大忙。

    有13位网友表示赞同!

素婉纤尘

InnoDB的三层B+树,听起来就像是数据库的超级英雄,处理数据能力这么强。

    有5位网友表示赞同!

蔚蓝的天空〃没有我的翅膀

2000万条数据,这个数字让人敬畏,InnoDB是怎么做到的?太想了解背后的技术了。

    有16位网友表示赞同!

算了吧

这个计算逻辑真让人惊叹,以前只听说过InnoDB的性能好,现在才知道它这么厉害。

    有20位网友表示赞同!

£烟消云散

2000万条数据,对于很多企业来说都是日常操作,InnoDB的表现真是太棒了。

    有13位网友表示赞同!

高冷低能儿

InnoDB的三层B+树,存储2000万条数据,这是不是意味着数据库的扩展性也很好呢?

    有15位网友表示赞同!

冷月花魂

学到了新知识,原来InnoDB这么强大,怪不得那么多开发者在用。

    有5位网友表示赞同!

伤离别

这个计算逻辑太实用了,我马上就要处理一个大数据量的项目,这回有信心了。

    有8位网友表示赞同!

抚涟i

对于初学者来说,这个计算逻辑可能有点难懂,但一看就是高级操作。

    有5位网友表示赞同!

巷雨优美回忆

2000万条数据,想想都头疼,但InnoDB的处理方式让我对数据库有了新的认识。

    有19位网友表示赞同!

南初

这个计算逻辑太复杂了,我可能得好好研究一下,不然以后的项目可能就用不上。

    有11位网友表示赞同!

如你所愿

InnoDB的三层B+树,存储2000万条数据,这是不是意味着数据库的查询效率也很高?

    有15位网友表示赞同!

掉眼泪

2000万条数据,对于我们这些做数据分析的人来说,InnoDB的性能太关键了。

    有18位网友表示赞同!

挽手余生ら

这个计算逻辑让我对数据库有了更深的理解,也让我对InnoDB的信任更上一层楼。

    有7位网友表示赞同!

微信名字

对于数据库来说,存储2000万条数据已经是非常高的要求了,InnoDB做到了,太棒了。

    有5位网友表示赞同!

怪咖

学习了,这个计算逻辑让我对InnoDB的性能有了全新的认识,感觉可以挑战更大的项目了。

    有19位网友表示赞同!

铁树不曾开花

InnoDB的三层B+树,存储2000万条数据,这背后一定有很多优化技巧,期待看到更多的技术分享。

    有5位网友表示赞同!

标签: