执行一次多列更新比多次更新更有效吗

Is it more efficient to execute one update with multiple columns vs multiple updates

你觉得哪个更好。每次更新 table 的所有列,即使并非所有值都发生变化,或者仅更新具有多次更新的已更改列。这个想法是,而不是立即更新每一个更改,等待一些更改然后更新所有列,但我不想实现一个逻辑来确定哪些列已被更改。

UPDATE myTable 
SET col1 = newVal1, 
    col2 = oldVal2,
    col3 = newVal3,
   ... 
WHERE x = y

对比

UPDATE myTable SET col1 = newVal1 WHERE x = y
UPDATE myTable SET col3 = newVal3 WHERE x = y
...

我正在使用 SQL Server 2014 Express。

第一个查询会执行得更好,因为它只需要在 table 上执行一个 scan/seek。但是在第一个查询中,您可以更新具有要更新的新值的列:

UPDATE myTable 
SET col1 = newVal1, 
    col3 = newVal3,
... 
where x = y

但是第二个查询必须 scan/seek 每个 Update 的 table,这将比第一个查询花费更多时间。

更新一次更好。但是,这实际上是您要在代码中实现何种语义的问题。这里有两个重要的问题:

  • 您是否希望 table 的其他用户立即可以使用列的新值?
  • 是否必须更改这两个值 "at the same time" 才能使数据保持一致?

在第一种情况下,您可以在单独的事务中进行单独的更新。

在第二种情况下,您可能希望在单个事务中完成所有更新,最好是在单个语句中。

至于性能,单次更新速度更快。 xy 上的索引(以 table 中的实际列为准)将加速所有版本的查询。