mysql一张表最多能存多少数据

哎呀,让我告诉你MySQL。
前年我在上海做一个项目。
客户端的服务器是 6 4 位的,我想知道它可以存储多少数据。
按照你说的,理论上是1 6 EB,是不是很吓人?这就是我们使用 InnoDB 的原因,默认页面大小为 1 6 KB,这意味着最大为 6 5 ,5 3 6 个页面,接近 1 TB。
我告诉你,我们在使用这个1 TB的时候一定要小心。

当时表中存储了很多长文本,我使用了 DYNAMIC 行格式。
本来是想节省空间,结果有些行放不下,容量一下子就减少了。
索引的问题就更大了。
仅索引就占用大量空间。
如果你仔细想想,一个表上的多个索引的总和几乎可以等于表本身。
最终,该表仅使用了几百GB,备份起来相当痛苦。

所以我建议大家不要总是关注理论上限。
去年备份我们 1 00GB 以上的表每次都非常慢。
它晚上运行,第二天早上就卡在那里了。
接下来该怎么办?拆分表、分区并创建多个小表。
这是一个工作日,现在更有趣了。

分区表很有帮助。
数据分散,管理方便。
我也尝试过压缩,虽然它可以节省一些空间,但对 CPU 来说有点紧张。
关于内存,innodb_buffer_pool_size一定要分配足够,否则频繁读磁盘据说很慢。

总结:不要认真对待理论。
在实践中,需要考虑行大小、索引和压缩。
打破表格和孤岛才是最终的决定。
预留一些空间,不要等到桌子变大。
过去十年我遇到的几乎所有陷阱都是由太大的手表造成的。

为什么MySQL单表不能超过2000万行?

结论:MySQL单表数据量上限是由于并发控制瓶颈造成的。

说明:InnoDB SMO操作是非原子的,多个节点发生变化,并发控制是个问题。

解决方案:B-LinkTree优化锁粒度,允许多个并发写入。

实验:GaussDB(B-LinkTree+Heap Table)并发条目性能优于MySQL。

结论:MySQL因数据量大而并发变化的问题已经得到控制,可以通过选择堆表来减少。

自己掂量一下。