MyISAM 表中超过 10 亿行

jac*_*ack 6 mysql

根据您的经验,在 Q9650 CPU(4 核,3.0G)和 8G RAM 的服务器上,MySQL 可以有效处理 MyISAM 表中的行数上限是多少。

我目前有一个包含 1500 万行的表。这是相当快的。如果规模增加到 10 亿行,我是否需要将其划分为 10 个表,每个表 1 亿行?

mem*_*oxy 15

我不会担心可以将索引保存在内存中的机器上有 10 亿行的应用程序性能。如果你真的想达到 10 亿行,你首先必须做一些数学计算:

  • 您的记录大小是多少,然后乘以 10 亿?
  • 接下来,您需要计算索引的大小(我猜是多个索引),然后将其添加进去。
  • 您是否有需要行级锁定的事务性需求?
  • 这是一个附加重表,还是一个重读表?

接下来,进入您的应用程序正常运行时间要求。

  • 你打算如何备份 1B 行?
  • 您将如何处理损坏的 1B 行表?
  • 您需要多久运行一次优化表?
  • 您将如何处理对 1B 行表进行架构更改?(最近在 2gb ram 的 2gh 双核盒子上的 3500 万行表上添加索引花了我 45 分钟。)

在担心性能之前,我会更担心这种规模的多 GB 表文件的数据生命周期和数据管理。通过复制,您可以弥补很多性能。保持数据健全并从即使是小灾难(例如坏内存引起的损坏)中恢复更有可能首先给您带来麻烦。

我还鼓励您使用您拥有的表格 - 并向其中添加 1B 行测试数据。这对于观察您的系统发生的情况非常有见地。针对这个新的庞大数据集对您的查询运行一些 EXPLAIN。Time 备份和恢复需要多长时间。您可能需要调整一些要求。

这是一篇关于 mysql 中 10 亿行的有趣文章