MySQL一张表能存的数据是多少

48次阅读
没有评论

共计 1288 个字符,预计需要花费 4 分钟才能阅读完成。

这篇“MySQL 一张表能存的数据是多少”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL 一张表能存的数据是多少”文章吧。

1、知识准备 1.1、数据页

在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小 4KB。同样的在 MySQL 中为了提高吞吐率,数据也是分页的,不过 MySQL 的数据页大小是 16KB。(确切的说是 InnoDB 数据页大小 16KB)。详细学习可以参考官网 我们可以用如下命令查询到。

mysql SHOW GLOBAL STATUS LIKE innodb_page_size 
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)

今天咱们数据页的具体结构指针等不深究,知道它默认是 16kb 就行了,也就是说一个节点的数据大小是 16kb

1.2、索引结构(innodb)

mysql 的索引结构咱们应该都知道,是如下的 b + 树结构

通常 b + 树非叶子节点不存储数据,只有叶子节点 (最下面一层) 才存储数据,那么咱们说回节点,一个节点指的是(对于上图而言)

每个红框选中的部分称为一个节点,而不是说某个元素。了解了节点的概念和每个节点的大小为 16kb 之后,咱们计算 mysql 能存储多少数据就容易很多了

2、具体计算方法 2.1、根节点计算

首先咱们只看根节点

比如我们设置的数据类型是 bigint,大小为 8b

在数据本身如今还有一小块空间,用来存储下一层索引数据页的地址,大小为 6kb

所以我们是可以计算出来一个数据为 (8b+6b=14b) 的空间(以 bigint 为例)我们刚刚说到一个数据页的大小是 16kb, 也就是 (16*1024)b,那么根节点是可以存储(16*1024/(8+6)) 个数据的,结果大概是 1170 个数据 如果跟节点的计算方法计算出来了,那么接下来的就容易了。

2.2、其余层节点计算

第二层其实比较容易,因为每个节点数据结构和跟节点一样,而且在跟节点每个元素都会延伸出来一个节点,所以第二层的数据量是 1170*1170=1368900,问题在于第三层,因为 innodb 的叶子节点,是直接包含整条 mysql 数据的,如果字段非常多的话数据所占空间是不小的,我们这里以 1kb 计算,所以在第三层,每个节点为 16kb,那么每个节点是可以放 16 个数据的,所以最终 mysql 可以存储的总数据为

1170 * 1170 * 16 = 21902400 (千万级条)

其实计算结果与我们平时的工作经验也是相符的,一般 mysql 一张表的数据超过了千万也是得进行分表操作了。

以上就是关于“MySQL 一张表能存的数据是多少”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计1288字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)