[英]SQL query update performance
我試圖理解為什么帶有 case 的 sql 更新的性能低於帶有 where 子句的兩個單獨的更新。
以下是條件:
我有兩個選擇。
選項1:
UPDATE tableA
SET Column3 = (CASE WHEN column1 IN (1,2,3) THEN 'A' ELSE 'B' END)
選項#2:
UPDATE tableA
SET column3 = 'A'
WHERE column1 IN (1,2,3)
UPDATE tableA
SET column3 = 'B'
WHERE column1 NOT IN (1, 2, 3)
選項 #2 的性能優於第一個。
如果有任何理由,我將不勝感激。
我認為選項 1 具有更好的性能,因為一個查詢沒有 where 子句。
您沒有向我們展示您的表和索引定義,或者您的查詢計划,所以這是一個猜測。
您的第一個查詢基本上意味着:更新表的每一行,將列設置為'A'
或'B'
。 它沒有 WHERE 子句,因此它必須掃描整個表並更改每一行。
您的第二個選擇,有兩個查詢,有可能使用索引來查找它必須更新的行。 在這兩個查詢之間,您仍然更新所有行。 不過看來你的系統還是省時間的。 可能的原因:
如果你想做這種多行更新,你會明智地做這樣的事情。
UPDATE tableA
SET column3 = 'A'
WHERE column1 IN (1,2,3)
AND column3 <> 'A'
這將跳過不需要更改的行的更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.