执行一次多列更新比多次更新更有效吗
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" 才能使数据保持一致?
在第一种情况下,您可以在单独的事务中进行单独的更新。
在第二种情况下,您可能希望在单个事务中完成所有更新,最好是在单个语句中。
至于性能,单次更新速度更快。 x
或 y
上的索引(以 table 中的实际列为准)将加速所有版本的查询。
你觉得哪个更好。每次更新 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" 才能使数据保持一致?
在第一种情况下,您可以在单独的事务中进行单独的更新。
在第二种情况下,您可能希望在单个事务中完成所有更新,最好是在单个语句中。
至于性能,单次更新速度更快。 x
或 y
上的索引(以 table 中的实际列为准)将加速所有版本的查询。