我想使用以下命令将一个 700MB 的表从 MyISAM 转换为 InnoDB:
ALTER TABLE table_name ENGINE = InnoDB;
我不确定为什么要花很长时间(它没有完成,我在等待一个小时后终止了查询)。我观察到我的内存使用率攀升至 60% 并稳定下来。我怀疑调整某些参数可能会有帮助,但我想知道是哪一个。
最佳答案
有一个discussion of issues关于在 MySQL 文档中转换为 InnoDB。
以下是一些要点/引述:
如果您的表有唯一性约束,请关闭唯一性检查 第一:
SET unique_checks=0; ALTER TABLE table_name ENGINE = InnoDB; SET unique_checks=1;
“为了更好地控制插入过程,最好 分块插入大表:"
INSERT INTO newtable SELECT * FROM oldtable WHERE yourkey > something AND yourkey <= somethingelse;
插入所有记录后,您可以重命名表。
"大表转换时,应该增加表的大小 InnoDB 缓冲池以减少磁盘 I/O。”
“确保您没有填满表空间:InnoDB 表 比 MyISAM 表需要更多的磁盘空间。如果一个 ALTER TABLE 操作空间不足,它开始回滚,这可能需要 小时,如果它是磁盘绑定(bind)的。”
关于mysql - 为什么从 MyISAM 转换到 InnoDB 需要很长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908592/