2012-05-24 181 views
0

我有一個非常大的MySQL表(數百萬行),獲取新的數據非常20分鐘。我起初犯了一個錯誤,並有一個時間戳記數據,而我真正想要的是一個日期時間欄。我怎樣才能將當前表或將其遷移到新的表,儘可能快地儘管仍然能夠將新數據附加到舊錶或新表中?MySQL時間戳datetime轉換

+0

沒有選擇讓數據庫脫機並運行查詢,例如在半夜? – mellamokb

+0

不是因爲該表監視每20分鐘發生的事件:/ – Cystack

回答

1

,與其要看是什麼/誰在使用數據庫,什麼控制你...

一種方法可能是:

  • 創建新表(與所需的數據結構) (CREATE TABLE...
  • 修改被寫入數據庫代碼/流程,讓他們寫兩個一老一新的表(但繼續從舊錶中讀取)
  • 一切正在寫入兩者,將舊錶中的舊數據複製到新表(INSERT ... SELECT ...
  • 修改正在從數據庫中讀取的代碼/進程,以便它們從新表中讀取(但繼續寫入兩者)
  • 一切從新表中讀取,修改代碼/進程只寫入新表
  • 一切被讀取和寫入到新表(單獨),你可以刪除舊錶。 (DROP TABLE...

你也可以通過改變現有表(即創建一個新的列)做類似的事情有,但是如果你的數據被更新每隔20分鐘,你可能有一個非常大的表,在這種情況下, ALTER TABLE查詢可能需要一段時間才能運行 - 所以我建議改爲遷移到新表。

+0

這很有趣,但看起來非常複雜。我不能停止寫作,但我可以停止閱讀,它會改變這個過程嗎? – Cystack

+0

另外,我應該使用腳本語言來移植它還是SQL提供本地工具? – Cystack

+0

@Cystack - 是的,它很複雜 - 但我假設你正在嘗試維護生產數據庫的功能,同時進行更改。停止閱讀可能會讓你結合第4 /第5次更改,但我仍然建議分開進行。對數據庫的所有更改都可以在數據庫中完成 - 添加了建議的命令。 – amaidment