将一个大表分成多个表

时间:2016-05-28 04:08:38

标签: mysql ruby-on-rails database performance

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

我找到了这个宝石octopus,但他是一个主人/奴隶,我只是想拆分大桌子。

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

enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

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

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

CREATE INDEX index_name ON table1 (id)

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

答案 1 :(得分:2)

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

  

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

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