仅更新更改的字段是否有助于延迟 SSD 磨损?

问题描述 投票:0回答:1

我正在更新数据库中各种实体的记录,并正在积极考虑创建定制的更新请求以延长 SSD 寿命是否有意义。

假设我有一个具有 20 个属性的对象和一个包含相应列的表。

如果我执行,而不是

,写入的字节数(重写的扇区)会有什么不同吗?
UPDATE MyTable
SET
  Filed1 = @Value1,
  Filed2 = @Value2,
  Filed3 = @Value3,
  .....
  Filed18 = @Value18,
  Filed19 = @Value19,
  Filed20 = @Value20
WHERE
  ID = @ID

UPDATE MyTable
SET
  Filed3 = @Value3,
  Filed17 = @Value17,
  Filed20 = @Value20
WHERE
  ID = @ID

如果仅更改值 3、17 和 20?

有什么好处吗?

sql-server sql-update solid-state-drive
1个回答
0
投票

它会有所作为,但不是你想象的那样。它主要影响读取而不是写入。而且 SSD 并不会真正受到大量读取的影响。

SQL Server 已经针对“非更新”更新进行了优化,方法是从现有行中读取值,并仅在需要的地方进行更新。如果行上没有任何更改(并且您没有使用 RCSI 隔离,并且没有

rowversion
GENERATED ALWAYS
列),则该行根本不会更新。

但是所有更新都会写入整页,并且一行不能超过一页,因此无论哪种方式,您都会写入整页。唯一不会发生这种情况的情况是当您有 LOB

max
类型时,如果数据太大,该类型会将其数据存储在行外。

因此写入几乎总是发生,但也需要考虑读取,因为 SQL Server 想知道值是否已更改。它要求它使用实际具有这些列的索引,这可能会对执行计划产生不利影响。

因此,如果您知道您不会更改这些列,请不要将它们添加到

UPDATE
。否则我不会担心它,因为它已经大部分优化了。

© www.soinside.com 2019 - 2024. All rights reserved.