2016-12-03 89 views
3

您认为哪种更好?即使没有更改所有值,每次更新表的所有列时,或者仅更新具有多个更新的更改的列时更新。这个想法是,而不是立即更新每一个变化,等待几个变化,然后更新所有的列,但我不想实现一个逻辑谁决定哪些列已被更改。执行一个多列更新与多列更新效率更高

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快速。

回答

5

第一个查询将执行好得多,因为,它只是需要在桌子上做单scan/seek。但在第一个查询可以更新具有新值的列进行更新:

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

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

1

做一个更新更好。但是,这实际上是你想在代码中实现什么语义的问题。这里有两个重要的问题:

  • 你想要一个列的新值立即可用表中的其他用户?
  • 为了保持数据的一致性,这两个值是否必须“同时”更改?

在第一种情况下,你可能会做单独的交易单独的更新。

在第二种情况下,你会想要做的所有更新在一个单一的交易,最好在一个单独的语句。

至于性能方面,单一的更新速度更快。 xy(表中的实际列)中的索引将加快查询的所有版本。