mysql - 为什么从 MyISAM 转换到 InnoDB 需要很长时间?

标签 mysql performance

我想使用以下命令将一个 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/

相关文章:

php - json_decode, foreach 只从 json 字符串返回一行

mysql - 什么数据库适合存储图像和视频?

c# - 传递一个类/结构与传递多个参数

c++ - 为什么这个 += 循环比等价的 = 循环更快?

.net - Perfmon、PerfMonitor 和 PerfView

mysql - 具有某些条件的 SQL 查询运行缓慢 - MySQL

mysql - mysql 库存数据库中的库存数量 View

php - 如何在Wordpress中获取单个变量

python - 没有 for 循环的 numpy 数组中的字典列表

performance - 快速将 RGBA 转换为 ARGB