在大型mysql表中添加一个新列

时间:2009-06-18 22:26:03

标签: mysql performance

在大型mysql表中添加新列的最快方法是什么?

Alter table add列创建完整表的副本,然后用新的create table替换旧表。在此过程运行时,原始表是可读的,但所有插入和更新都会停止。

在大型表格上,副本可能需要很长时间,有没有办法减少它?

3 个答案:

答案 0 :(得分:5)

你被困在做ALTER TABLE。有效解决这个问题的最佳方法是使用MASTER-MASTER设置。

您可以先修改MASTER1,然后在生产中使用MASTER2。然后你切换并完全相反。

答案 1 :(得分:2)

请勿在活动系统上进行此操作。对于活动系统,请在关闭系统进行常规维护时执行此操作。

答案 2 :(得分:1)

假设有一个INNODB表:

  1. 将{现有表}复制到{新表},没有数据(仅架构)
  2. 使用Alter表命令在NEW表上添加/更改列(应该在闪存中工作)
  3. MYSQLDUMP现有表(使用单事务, - no-drop-table等)到文件
  4. 将转储文件导入{新表}(这可能需要一段时间,但旧表仍可在此期间使用)
  5. 在维护期间,DROP {Old Table}并将{New Table}重命名为之前的{Old Table}。