当更新的值相同时,数据库引擎会更新吗?

kyo*_*ryu 0 oracle sql-server

假设我在一行上运行多列更新。如果某些列包含与数据库中先前存在的值相同的值,则数据库引擎是否将新数据物理写入数据库?如果是,如何避免?

我即将实施一项作业,该作业将在大表上运行更新,并且大多数值将相同,但仍然必须重新计算它们。我想知道即使没有必要,更新是否也会重写每一列,因为存储介质会更快地降级。

Rem*_*anu 5

您应该假设 UPDATE 始终写入新值,即使是相同的。编写查询以使用适当的 WHERE 子句消除无操作。将其视为大表更新,即。分批进行并使其具有幂等性。是唯一不受假设和实现特定细节影响的安全方法。

举个例子,如果您在 SQL Server 2012 之前进行测试,您可能会得出结论,生成相同的就地行图像的更新不会更新页面,也不会生成日志,而在相同条件下的 SQL 2012,您可能会得出结论,它不会更新页面,但确实生成日志。