我曾经使用过一个非常大的(Terabyte)MySQL数据库。我们所拥有的最大的表是超过十亿行。
有效。 MySQL大多数时间都正确处理数据。这是非常尴尬,但。
只是备份和存储数据是一个挑战。如果我们需要,恢复表需要几天。
我们在1000万行范围内有许多表。任何重要的连接到表是太费时,并会永远。因此,我们编写了存储过程来“走”表和处理连接对’id’的范围。这样,我们一次处理数据10-100,000行(加入ID为1-100,000,然后100,001-200,000等)。这显然快于加入整个桌子。
在非基于主键的非常大的表上使用索引也困难得多。 Mysql存储索引两个部分 – 它存储索引(主索引除外)作为主键值的索引。因此,索引查找分为两部分:首先MySQL到一个索引,并从它需要找到的主键值,然后它对主键索引进行第二次查找,以找到这些值的位置。
这样做的结果是,对于非常大的表(1-200亿加上行),对表的索引更具限制性。您需要更少,更简单的索引。甚至做一些不直接在索引上的简单select语句也许永远不会回来。 where子句必须命中索引或忘记它。
但是所有的说,事情确实工作。我们能够使用MySQL和这些非常大的表,并做计算,得到正确的答案。