我想用以下命令将700MB表从MyISAM转换为InnoDB:
ALTER TABLE table_name ENGINE = InnoDB;
我不确定为什么它会花费很长时间(它没有完成,我在等待一小时后就终止了查询)。我观察到我的记忆力下降到了60%并且平稳了。我怀疑调整一些参数可能有所帮助,但我想知道哪一个。
答案 0 :(得分:4)
在MySQL文档中有关于InnoDB的转换discussion of issues。
以下是一些亮点/引号:
如果您的表具有唯一约束,则关闭唯一检查 第一:
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 操作空间不足,它开始回滚,这可以采取 如果它是磁盘绑定的小时。“
答案 1 :(得分:3)
因为它基本上需要创建一个新表,复制所有数据,创建新索引并删除旧表。两种存储引擎都有非常不同的方式在磁盘上存储数据,因此转换并不简单。
您可以尝试将表转储到SQL中,编辑转储,以便create table语句使用InnoDB而不是MyISAM,并将其上传回来。我认为它可能会快一些。
另请注意,my.cnf
中InnoDB缓冲池的默认值可能非常低,导致InnoDB没有足够的内存来有效工作。