2017-11-10 162 views
2

我被唯一索引更新單列SQL更新單列,Where子句

UPDATE Users SET Enabled=1 WHERE Id=1 

它使關於執行速度,以檢查它是否已經Enabled意義嗎?

UPDATE Users SET Enabled=1 WHERE Id=1 AND Enabled<>1 
+1

您必須指定專門的RDBMS,他們的言行舉止變化基於數據庫引擎。 – Andrew

+1

您定義了哪些索引? - 例如,如果你有一個在id上定義的索引,但沒有啓用,那麼第二種方式將會變慢而不是變快。 – Hogan

+0

Id是唯一索引,Enabled不是(它可以是0或1) – Molochnik

回答

1

我喜歡寫那些冪等SQL腳本:

UPDATE Users 
SET Enabled=1 
WHERE Id=1 
    AND Enabled<>1; -- if column is defined as NOT NULL 

方案:

  • 觸發一個寫入影子/歷史記錄表(它會觸發一次)
  • 最後更新日期(只會更改一次)
  • 更改跟蹤不會將行標記爲已更新
  • 也許慢,但比較一致的
+0

附加子句可以使SQL更慢嗎?不是更快?即使假設有相當數量(20%-80%)的案例行未更新。正如我所看到的,沒有情況是我的情況,我只需要確保Enabled儘可能快,僅此而已。 – Molochnik