MySQL改变引擎数百万行表

时间:2017-06-22 11:17:12

标签: mysql innodb

我想将200万行表的引擎从MyISAM更改为InnoDB。我害怕这个长时间的操作,所以我创建了类似的结构InnoDB表,现在我想将旧的一个数据复制到这个新的。什么是最快的方式? SELECT INSERT? START TRANSACTION怎么样?请帮忙。我不想挂我的服务器。

2 个答案:

答案 0 :(得分:0)

帮自己一个忙:将整个设置复制到本地计算机并在那里尝试。您将更好地了解自己的目标。请注意生产服务器和本地计算机之间硬件的潜在差异。

最快的方式可能是最直接的方式:

INSERT INTO table2 SELECT * FROM table1;

答案 1 :(得分:0)

我怀疑你不能比ALTER中内置的更快。它必须复制所有数据并重建所有索引。

一定要筹集innodb_buffer_pool_size来准备InnoDB。并降低key_buffer_size以允许空间。分别为转换建议35%和12%的RAM。转换完所有表后,建议70%,仅20MB。

一个小的加速是做一些选择,取出整个表和整个PRIMARY KEY(如果它可以被缓存)。这将在真正启动之前执行一些I / O.示例:SELECT avg(id) FROM tbl其中id是主键。并且SELECT avg(foo) FROM tbl其中foo没有编入索引但是数字。这些将强制完全扫描PK索引和数据,从而缓存ALTER必须阅读的内容。

有关转换的其他提示:http://mysql.rjweb.org/doc.php/myisam2innodb