2009-06-18 64 views
12

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

改變表添加列創建完整表的副本,然後用新的創建表替換舊錶。在此過程正在運行時,原始表格可讀,但所有插入和更新都停止。

在大型表格上,副本可能需要很長時間,有什麼方法可以減少它?

+0

相關問題:http://stackoverflow.com/questions/1645215/how-do-i-add-a-column-to-large-sql-server-table – 2011-05-19 18:38:42

+1

考慮調整innodb_log_file_size(但要小心,請參閱http://www.mysqlperformanceblog.com/2011/07/09/how-to-change-innodb_log_file_size-safely/)和innodb_log_buffer_size。有關更多信息,請參閱此處的答案:http://stackoverflow.com/a/12688184/1148030 – 2012-10-02 10:07:03

回答

5

你被困在做ALTER TABLE。有效處理此問題的最佳方法是使用MASTER-MASTER設置。

您可以先修改MASTER1,然後在生產中使用MASTER2。然後你切換,做相反的事情。

2

不要在活動系統上執行此操作。對於一個活動的系統,請在系統關閉以進行定期維護時執行此操作。

1

假設一個InnoDB表:

  1. 複製{現有表}到{新表}無數據(僅架構)
  2. 使用alter table命令來添加/修改的新表列(應該工作在一瞬間)
  3. MYSQLDUMP現有表(使用單一事務,--no-drop-table等)到文件
  4. 導入轉儲文件到{新表}(這可能需要一段時間,但舊錶仍然在此期間可用)
  5. d使用維護期,DROP {Old Table}並將{New Table}重命名爲前一個{Old Table}。