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