您认为更好的是什么?即使没有更改所有值,也会每次更新表的所有列,或仅更新具有多个更新的已更改列。我的想法是,而不是立即更新每一个更改,等待一些更改,然后更新所有列,但我不想实现一个逻辑谁来确定哪些列已被更改。
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。
答案 0 :(得分:6)
第一个查询会表现得更好,因为它只需要在表上执行一个scan/seek
。但是在第一个查询中,您可以更新具有要更新的新值的列:
UPDATE myTable
SET col1 = newVal1,
col3 = newVal3,
...
where x = y
但第二个查询必须scan/seek
每个Update
的表格,这将比第一个查询花费更多时间。
答案 1 :(得分:2)
更新一次更新。但是,这实际上是您希望在代码中实现什么语义的问题。以下是两个重要问题:
在第一种情况下,您可以在单独的事务中执行单独的更新。
在第二种情况下,您希望在单个事务中执行所有更新,最好是在单个语句中。
至于性能,单个更新速度更快。 x
或y
上的索引(以表格中的实际列为准)将加快查询的所有版本。