执行具有多列和多个更新的一个更新是否更有效

时间:2016-12-03 15:07:06

标签: sql sqlperformance sql-server-2014-express

您认为更好的是什么?即使没有更改所有值,也会每次更新表的所有列,或仅更新具有多个更新的已更改列。我的想法是,而不是立即更新每一个更改,等待一些更改,然后更新所有列,但我不想实现一个逻辑谁来确定哪些列已被更改。

r.zadd('sset', *(y for x in lst for y in x))

VS

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

我正在使用SQL Server 2014 Express。

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

更新一次更新。但是,这实际上是您希望在代码中实现什么语义的问题。以下是两个重要问题:

  • 您是否希望列的新值立即可供表的其他用户使用?
  • 这两个值是否必须“同时”更改才能使数据保持一致?

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

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

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