2012-10-16 16 views
3

我有一個250GB的500M行MySQL表,並且想要刪除它的一列。 該列是VARCHAR(255)。我希望儘可能少的停機時間執行此操作。想法:如何從MySQL大表中刪除一列

  1. 是否有任何配置可以添加,這將有助於此操作?
  2. 在每一行之前在php中迭代並刪除其中的值會更好嗎?
  3. 事後需要優化表嗎?
  4. 對於這樣的程序,合理的時間估計是什麼?
+0

'2.在每行之前迭代php並刪除它裏面的值會更好嗎? - 絕對不是,在mysql中自己做。 – TZHX

+0

首先在標準中使用的列上添加索引。不要使用php。 php會在RAM中加載它的變量,因爲沒有RAM可以同時處理250 GB,所以你應該循環遍歷塊,這肯定比mysql操作需要更多的時間。 – Leri

+0

@DainisAbols但是這不需要一天嗎? – Noam

回答

0

爲了保證最小的停機時間,我會親自備份並恢復到備用數據庫,然後再執行「刪除列」操作,然後再恢復。

  1. link

  2. 它可能是,但它會需要更長的時間和更容易出錯,我會說。

  3. 沒錯,好主意,也可以考慮使用手

OPTIMIZE TABLE之前ANALYZE TABLE; 當DBMS脫機進行定期維護時,應運行OPTIMIZE命令。該命令是非標準SQL。