2016-12-03 62 views
3

您認爲哪種更好?即使沒有更改所有值,每次更新表的所有列時,或者僅更新具有多個更新的更改的列時更新。這個想法是,而不是立即更新每一個變化,等待幾個變化,然後更新所有的列,但我不想實現一個邏輯誰決定哪些列已被更改。執行一個多列更新與多列更新效率更高

UPDATE myTable 
SET col1 = newVal1, 
    col2 = oldVal2, 
    col3 = newVal3, 
    ... 
WHERE x = y 

UPDATE myTable SET col1 = newVal1 WHERE x = y 
UPDATE myTable SET col3 = newVal3 WHERE x = y 
... 

我使用SQL Server 2014快速。

回答

5

第一個查詢將執行好得多,因爲,它只是需要在桌子上做單scan/seek。但在第一個查詢可以更新具有新值的列進行更新:

UPDATE myTable 
SET col1 = newVal1, 
    col3 = newVal3, 
... 
where x = y 

但第二個查詢必須scan/seek表每個Update這將需要更多的時間比第一個查詢。

1

做一個更新更好。但是,這實際上是你想在代碼中實現什麼語義的問題。這裏有兩個重要的問題:

  • 你想要一個列的新值立即可用表中的其他用戶?
  • 爲了保持數據的一致性,這兩個值是否必須「同時」更改?

在第一種情況下,你可能會做單獨的交易單獨的更新。

在第二種情況下,你會想要做的所有更新在一個單一的交易,最好在一個單獨的語句。

至於性能方面,單一的更新速度更快。 xy(表中的實際列)中的索引將加快查詢的所有版本。