2010-10-27 90 views
4
  • 讓假設你有100萬行和不斷增長的表...
  • 你運行一個python PROGRAMM每一天的每五分鐘必須更新某些字段50K行

我的問題是:做這項工作的最快方法是什麼?什麼是更新在MySQL幾千行的最快方法

  • 在循環中運行這些更新,並在執行最後一個更新後啓動遊標提交?
  • 或生成文件,並通過命令行運行它?
  • 通過巨大而又快速的插入創建臨時表,然後對生產表運行一次更新?
  • 做準備報表?
  • 將每次執行更新分割爲1K更新,以生成較小的日誌文件?
  • 在運行更新時關閉日誌記錄?
  • 或在MySQL examples做一個案例(但這隻能達到255行)

我不知道......已經有人做這樣的事情?最佳做法是什麼?我需要儘可能快地運行它...

+0

如何關於閱讀?數據庫讀取%90時間或數據庫僅用於保存信息並寫入%90時間,並讀取%10時間? – nerkn 2010-10-27 09:50:30

回答

4

這裏,你可以加快你的UPDATES一些方法。

當你UPDATE,表中的記錄只是被改寫新數據。所有這些都必須在INSERT上再次完成。這就是爲什麼你應該總是使用INSERT ... ON DUPLICATE KEY UPDATE而不是REPLACE

前者是一個關鍵違反情況下UPDATE操作,而後者是一個DELETE/INSERT

下面是關於這here一個例子INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;更多。

UPDATE1:這是一個好主意,可以在單個查詢中完成插入操作。這應該加快你的UPDATES。請參閱here關於如何做到這一點。

UPDATE2:現在我有機會閱讀您的其他子問題。這是我知道 -

  • ,而不是在一個循環中,嘗試在單個SQL &單個提交執行所有UPDATE
  • 不知道這會有什麼不同。 SQL查詢更重要。
  • 現在,您可以嘗試一下。基準。這種事情取決於您所擁有的TABLE & INDEXES的大小,再加上INNODB or MYISAM
  • 不知道這件事。
  • 請參閱第一點。
  • 是的,這可能會稍微加快你的速度。另請參閱您是否打開了slow_query_log。這會將所有慢速查詢記錄到單獨的日誌文件中。也關掉這個。
  • 再次。請參閱第一點。
+0

好吧,謝謝你,但你想如何更新單個SQL中的50K行? – nabizan 2010-10-27 11:14:27

+0

編寫代碼爲你創建'SQL' :) – 2010-10-27 11:34:55

0

查詢的執行過程:服務器第一解析您的查詢,然後執行,你需要分析
查詢

然後服務器需要更少的時間來分析,然後他執行得更快,而不是緩慢其他方式

相關問題