【问题标题】:Max number of rows in MySQLMySQL 中的最大行数
【发布时间】:2026-01-07 17:05:01
【问题描述】:

我计划生成大量数据,并将其存储在 MySQL 数据库中。我目前的估计指向主表中的四 千百万 十亿 行(只有两列,其中一列已编入索引)。

这里有两个问题:

1) 这可能吗?

更具体地说:

2) 这样的表能有效使用吗?

谢谢!, 詹姆

【问题讨论】:

  • 什么样的数据,你打算怎么用?
  • 我很想知道,当你有四亿行时,你在存储什么样的数据? :)
  • 出于某种原因,40 亿听起来不像 40 亿那么大。
  • 科学结果:我只需要存储大量物种基因组序列之间的全反全关系。然后我必须进行查询以根据某些标准对它们进行分组。
  • 这可能是 100gb 的数据?我有更多电子邮件的用户,我想你会没事的。但是,将其乘以 10,我会开始考虑 BigTable。

标签: mysql


【解决方案1】:

当然,这是可能的。它是否可用将取决于您如何使用它以及您拥有多少硬件/内存。对于这么大的表,如果分区对您要存储的数据类型有意义,那么使用分区可能也是有意义的。

预计到达时间:

基于您只有两列且其中一列被索引的事实,我将在这里大胆猜测这是某种键值存储。如果是这种情况,您可能还需要研究专门的键值存储数据库。

【讨论】:

【解决方案2】:

可能是可能的,MySQL 有几个具有不同功能的表存储引擎。例如,我认为 MyISAM 存储引擎有一个theoretical data size limit of 256TB,但它进一步受到操作系统上文件的最大大小的限制。我怀疑它是否可用。我几乎可以肯定它不会是最优的。

我肯定会考虑以对您的键有意义的方式将这些数据划分到多个表(甚至可能是多台机器上的多个数据库),然后联合任何搜索结果/总计/等。你需要。除此之外,这允许您在并行搜索每个分区的情况下进行搜索(在多服务器方法中)。

我还会寻找一种已经完成了繁重的分区和联合查询的解决方案。我想知道 Google 的 AppEngine 数据存储 (BigTable) 或 Amazon SimpleDB 是否有用。它们都会限制您可以对数据执行的操作(它们不是 RDBMS 的),但是无论如何,绝对大小都会这样做。

【讨论】:

  • "...但它进一步受到操作系统上文件的最大大小的限制" - mysql 没有可以使用原始未分区磁盘存储数据的模式吗?这可能会避免文件系统文件大小的限制。
  • 这是一个链接;没有提到避免文件大小限制。 dev.mysql.com/doc/refman/5.0/en/innodb-raw-devices.html
  • @unknown:这很酷。正如我所说,MySQL "...有几个具有不同功能的表存储引擎...MyISAM 引擎,例如...[is] 进一步受限..."(请参阅嵌入的链接在句子中)。 InnoDB(不同的引擎)可以使用原始设备非常酷。
【解决方案3】:

您应该考虑对数据进行分区...例如,如果两列之一是名称,则根据第一个字母将行分成 26 个表。

【讨论】:

    【解决方案4】:

    我创建了一个 mysql 数据库,其中一个表包含超过 200 万行(导入的美国人口普查县线数据以覆盖在 Google 地图上)。另一个表的行数略低于 100 万行(USGS Tiger 位置数据)。这是大约 5 年前的事了。

    我真的没有问题(一旦我记得创建索引!:))

    【讨论】:

    • 他有 4 十亿 行数据。这比你所拥有的要多 1000 倍,所以很遗憾,我认为你的答案不是很相关。
    【解决方案5】:

    4 gigarows 并没有那么大,实际上,今天任何数据库引擎都可以处理它。甚至分区也可能是一种矫枉过正。它应该可以正常工作。

    不过,您的表现将取决于您的硬件。

    【讨论】: