我想在我的表運行此:更改HUGE表中列的數據類型。性能問題
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
但我的表是巨大的,它比65M以上(65億美元)的行。現在當我執行的時候,執行這個命令需要將近50分鐘。任何更好的方式來改變表?
我想在我的表運行此:更改HUGE表中列的數據類型。性能問題
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
但我的表是巨大的,它比65M以上(65億美元)的行。現在當我執行的時候,執行這個命令需要將近50分鐘。任何更好的方式來改變表?
那麼,你需要
ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)
但是,你是正確的,這需要一段時間來進行更改。真的沒有更快的方式來改變MySQL中的表格。
在變更過程中,您擔心停機嗎?如果是這樣,這裏有一種可能的方法:將表格複製到新的表格中,然後更改副本上的列名稱,然後重命名該副本。
您可能已經想通過在生產系統中常規更改表中的列名不是一個好主意。
您可以使用Oak處理模式更改而無需停機。
oak-online-alter-table複製原始表的模式,應用您的更改並複製數據。 CRUD操作仍然可以被調用,因爲橡木會在原始表格上放置一些觸發器,因此在操作過程中不會丟失任何數據。
請參考other question橡木的作者給出了關於這種機制的詳細解釋,並且還提出了其他工具。
另一種變體使用的Percona工具包 https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html
不,這將是緩慢的。 ALTER語句是一次性操作。等一下,希望你不需要再做一次。 –
巨大的桌子?沒有。很大?是。 –