2012-09-13 119 views
2

它是更高效的多列SQL UPDATE:一個語句或多個單列語句中的多個列?

UPDATE myTable 
SET [col1] = [col1] + 1, 
[col2] = [col2] + 1, 
[col3] = [col3] + 1, 
... 
[colN] = [colN] + 1 

或多個UPDATE每一個列語句來執行一個UPDATE聲明?

UPDATE myTable SET [col1] = [col1] + 1 
UPDATE myTable SET [col2] = [col2] + 1 
UPDATE myTable SET [col3] = [col3] + 1 
... 
UPDATE myTable SET [colN] = [colN] + 1 
+1

如果您單獨執行查詢,您可能會收到連接開銷,具體取決於您如何執行它們。 –

回答

6

這可能與特定實現任何一個數據庫引擎的不同,但我會投我的票,一個單一的更新通常比連續更新更好的執行。數據庫只需要找到所需的記錄一次,更新相關的值,並完成它。

現在,考慮到計劃緩存,索引,優化程序和其他手頭上的要素使得事情變得更加智能化,很可能多版本版本幾乎接近前者的性能,但我的期望是,即使在最好的情況下,前者的表現也會更好。

1

毫無疑問,單一陳述更有效率。每條更新語句都需要將記錄提取到內存中,在記錄上執行更新,然後寫出結果。

通過多次更新,您必須多次讀入記錄並多次寫出。有一個聲明,你做一次。

另外,數據庫記錄對日誌文件的更改,以保持數據的完整性。無論正在更改的字段數量是多少,都會記錄每個更新。

當涉及大於內存,約束和觸發器的索引,表時,情況變得更糟。

第二個版本應該大約是第一個版本的N倍,其中N是要修改的列數。