Mysql 将一个大表拆分为多个表

Mysql 将一个大表拆分为多个表,mysql,ruby-on-rails,database,performance,Mysql,Ruby On Rails,Database,Performance,rails应用程序,我有一个表,数据已经有数亿条记录,我将把表拆分成多个表,这样可以加快读写速度 我找到了这块宝石,但他是个主人/奴隶,我只想把这张大桌子劈开 CREATE INDEX index_name ON table1 (id) 或者当桌子太大时我能做什么? 您每行都有ID吗?如果答案是肯定的,您可以执行以下操作: CREATE TABLE table2 AS (SELECT * FROM table1 WHERE id >= (SELECT COUNT(*) FROM tabl

rails应用程序,我有一个表,数据已经有数亿条记录,我将把表拆分成多个表,这样可以加快读写速度

我找到了这块宝石,但他是个主人/奴隶,我只想把这张大桌子劈开

CREATE INDEX index_name ON table1 (id)
或者当桌子太大时我能做什么?


您每行都有ID吗?如果答案是肯定的,您可以执行以下操作:

CREATE TABLE table2 AS (SELECT * FROM table1 WHERE id >= (SELECT COUNT(*) FROM table1)/2);
上面的语句使用表1中的一半记录创建了一个新表

我不知道您是否已经尝试过,但索引应该有助于提高大型表的速度

CREATE INDEX index_name ON table1 (id)

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

每行上都有ID吗?如果答案是肯定的,您可以执行以下操作:

CREATE TABLE table2 AS (SELECT * FROM table1 WHERE id >= (SELECT COUNT(*) FROM table1)/2);
上面的语句使用表1中的一半记录创建了一个新表

我不知道您是否已经尝试过,但索引应该有助于提高大型表的速度

CREATE INDEX index_name ON table1 (id)

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

理论上,一个具有正确索引的正确设计的表将能够非常轻松地处理非常大的表。随着表的增长,查询和插入新记录的速度应该可以忽略不计。但在实践中,我们发现它并不总是这样工作!然而,解决方案肯定不是将表一分为二。解决办法是

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


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

理论上,一个设计合理、索引正确的表能够非常轻松地处理非常大的表。随着表的增长,查询和插入新记录的速度应该可以忽略不计。但在实践中,我们发现它并不总是这样工作!然而,解决方案肯定不是将表一分为二。解决办法是

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

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