2011-05-24 61 views
2

我有一個表有26列與幾千條記錄。 有沒有辦法批量更新此表?批量更新巨大的表

現在我只需要對每列需要更新的標準更新。 例如

update mytbl 
set col1 = replace(....) 

update mytbl 
set col1 = col1 + "xyz" 

update mytbl 
set col2 = "test..." 

我知道,每個記錄的上述聲明將首先前往下一列(S)之前更新所有記錄的列。

我正在尋找「快速批量更新」,因爲這需要太長時間。

感謝

+1

每列的標準是否有所不同?例如,只有當x是tue時更新第1列,y時是第2列還是所有列的標準相同? – BugFinder 2011-05-24 10:56:22

+0

不同的標準是。 – Ernesto 2011-05-24 11:16:24

回答

1

您可以使用此結構:

UPDATE myTable 
SET col1 = REPLACE(col1.....), 
    col2 = 'some value' 
+0

可以這樣來完成: 更新mytable的 集COL1 =替換(COL1 ...), COL1 = COL1 +「一些價值」,試圖通過所建議的更新比一次更COL1在MULTICOL更新時 – Ernesto 2011-05-24 11:22:36

+0

錯誤回報ck .. 在同一SET子句中,不能爲列分配多個值。 – Ernesto 2011-05-24 11:46:56

+0

@Ernesto - 你可以發佈你的SQL(編輯你的問題來添加它)和完整的錯誤信息。這將有助於發現問題。 – Tony 2011-05-24 12:36:44

1

1 - 一對夫婦一千記錄×26場並不大:)

2 - 無論是使用多字段更新語法ck建議,或將其插入可能更快的新表格中:

SELECT (REPLACE(col1...)) as Col1, 
     'Some Value' as Col2, 
     ... 
INTO MyNewTable 
FROM MyOldTable 
+0

至少有600 000條記錄。 我在一列上做了多個更新,直到數據的格式爲必需。 E.G. urlcol可能有價值http://www.test.com/tess/1234/zap。PHP 我然後做一個更新刪除HTTP://部分 然後 另一個更新刪除任何東西后.COM 結果urlcol然後www.test.com 一些列我只能從其他信息更新列 – Ernesto 2011-05-24 11:07:43

+0

正如您所提到的,該操作將在1個表上執行。這意味着查詢不會有任何連接。那麼別擔心。 JNK - 「INTO MyNewTable」我認爲,我們可以直接在目標表上執行update語句而不會引入第二個表? – Pankaj 2011-05-24 11:21:08

+0

我參加了約120萬次賽事的測試,耗時19分鐘。 – Ernesto 2011-05-24 11:26:50

0

這些advic由CK

  1. 如果有可能鎖定在更新過程中進行獨佔訪問表的建議 1.使用萬事更新:ES是記錄更大數量更爲有用,但無論如何可能的幫助。

  2. 禁用所有索引。更新完成後還原它們。

0

請注意以下幾點。

  1. 您可以使用SQL事件探查器來檢查在更新過程中是否有任何觸發器正在執行某些操作。

  2. 您可以禁用索引。現在運行你的測試並最終恢復它。