根据您的经验,MyISAM 表中的行的上限是多少,MySQL 可以在具有 Q9650 CPU(4 核,3.0G)和 8G RAM 的服务器上有效处理。
我目前有一个包含 1500 万行的表。它非常快。如果规模增加到 10 亿行,是否需要将其划分为 10 个表,每个表有 1 亿行?
根据您的经验,MyISAM 表中的行的上限是多少,MySQL 可以在具有 Q9650 CPU(4 核,3.0G)和 8G RAM 的服务器上有效处理。
我目前有一个包含 1500 万行的表。它非常快。如果规模增加到 10 亿行,是否需要将其划分为 10 个表,每个表有 1 亿行?
我不会担心在可以将索引保留在内存中的机器上有 10 亿行的应用程序性能。如果你真的想达到 10 亿行,你首先必须做一些数学运算:
接下来,进入您的应用程序正常运行时间要求。
在担心性能之前,我会更多地担心数据生命周期和这么大的数 GB 表文件的数据管理。使用复制,可以弥补很多性能。保持数据健全并从即使是小灾难(如坏 ram 引起的损坏)中恢复更有可能首先给您带来麻烦。
我还鼓励您使用您拥有的表格 - 并向其中添加 1B 行测试数据。这对于观察您的系统发生的事情非常有洞察力。针对这个新的庞大数据集对您的查询运行一些 EXPLAIN。记录备份和恢复所需的时间。您可能需要调整一些要求。
这是一篇关于 mysql 中 10 亿行的有趣文章。
只是为了补充上面的一些评论,我之前在 quad-xeons 上拥有十亿行表,尽管使用 32Gb RAM,而不仅仅是 8 个。
为了确保我们的性能良好,表被尽可能地简化和规范化以保持它们的精简,然后在它们上只有几个索引。对我来说,那些非常大的表的主要目的只是写下时间序列数据。大量写入,全部按顺序进行,而读取很少。必要的读取总是针对另一列或 2 列搜索特定时间,因此索引可以解决这个问题。
存储在 SAN 上的表由 SRDF 自动备份,有时确实出现问题(磁盘已满等),修复需要大约 4 小时。
取决于您正在运行的查询。如果您正在这样做
SELECT * FROM table
,它通常会比使用 10 秒的查询运行得快得多JOIN
。取决于您的硬件、数据、您运行的查询以及您认为的快速。对于简单的 (
"select * from table where foo='bla'"
) 查询,计算很容易:如果您的查询使用索引并且该索引适合您的操作系统的文件系统缓冲区,那么它会很快。如果不合适,则查询运行速度较慢(慢多少取决于 mysql 必须读取的数据量和磁盘的速度)但是,我会使用符合 ACID 的数据库,例如带有此类表的 postgres,您不想修复具有十亿行的表