执行SQL UPDATE之前WHERE过滤的好处

时间:2014-02-19 19:24:41

标签: sql sql-server

我的目标RDBMS是SQL Server 2012 - 但我对此处的一般回复感兴趣。

让我们考虑以下SQL Update子句:

UPDATE MyTable SET Active = 0 WHERE EffectiveDate < GETDATE()

假设 MyTable 中可能有多个条目,其中Active已设置为&#34; 0&#34;对于过去的事件,这样的更新是否有任何巨大的性能优势呢?

UPDATE MyTable SET Active = 0 WHERE EffectiveDate < GETDATE() AND Active = 1

4 个答案:

答案 0 :(得分:3)

如果你有Active上的索引

,你的写入次数会减少(可能因为你说的大多数已经是0?)而且索引的更新次数减少了

答案 1 :(得分:3)

最大的节省可能是写入日志。更新的每一行都会生成日志记录。通过更新更少的行,您将记录更少的更改。

正如不久前在另一个问题中所指出的,避免这些更新可以简化触发器上的一些神秘方面。 “update(column)”语法会将该列标识为已修改,即使该值未发生更改。

答案 2 :(得分:1)

要为其他答案添加一个点:如果您有更新触发器,则会有差异,因为它只会针对满足WHERE条件的行触发。根据触发器内容,这可能会导致不良影响。

答案 3 :(得分:0)

是的,是的!

正如你所说,Active = 0有很多条目,因此将更新查询限制为只有没有active = 0的记录意味着查询次数较少。