[英]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.