将一个大表分成多个表

rails app,我有一个表,数据已经有数亿条记录,我要将表拆分为多个表,这样可以加快读写速度。

我找到了这个gem章鱼 ,但他是一个主/从,我只是想拆分大桌子。

或者当桌子太大时我该怎么办?

在此处输入图像描述

从理论上讲,正确设计的表具有恰当的索引,可以很容易地处理非常大的表。 随着表的增长,查询速度变慢,新记录的插入应该可以忽略不计。 但在实践中,我们发现它并不总是这样! 然而,解决方案绝对不是将表分成两部分。 解决方案是分区 。

通过使您能够根据您可以根据需要设置的规则在文件系统中分发单个表的各个部分,分区将这一概念更进一步。 实际上,表的不同部分作为单独的表存储在不同的位置。 用于完成数据划分的用户选择规则称为分区函数,其在MySQL中可以是模数,与一组范围或值列表的简单匹配,内部散列函数或线性散列函数。

如果您只是拆分一个表,您的代码将变得无比复杂,每次进行插入或检索时,您需要确定应该运行该查询的哪个拆分。 当您使用分区时,mysql会为您处理该详细信息,就应用程序而言,它仍然是一个表。

你每行都有一个身份证吗? 如果答案是肯定的,你可以这样做:

CREATE TABLE table2 AS (SELECT * FROM table1 WHERE id >= (SELECT COUNT(*) FROM table1)/2); 

上面的语句创建了一个新表,其中包含table1中的一半记录。

我不知道你是否已经尝试过,但索引应该有助于提高速度。

 CREATE INDEX index_name ON table1 (id) 

注意:如果使用唯一约束或主键创建表,则已存在索引。