我的目标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
答案 0 :(得分:3)
如果你有Active
上的索引
答案 1 :(得分:3)
最大的节省可能是写入日志。更新的每一行都会生成日志记录。通过更新更少的行,您将记录更少的更改。
正如不久前在另一个问题中所指出的,避免这些更新可以简化触发器上的一些神秘方面。 “update(column)”语法会将该列标识为已修改,即使该值未发生更改。
答案 2 :(得分:1)
要为其他答案添加一个点:如果您有更新触发器,则会有差异,因为它只会针对满足WHERE
条件的行触发。根据触发器内容,这可能会导致不良影响。
答案 3 :(得分:0)
是的,是的!
正如你所说,Active = 0
有很多条目,因此将更新查询限制为只有没有active = 0的记录意味着查询次数较少。