2

UPDATE多列执行一条语句效率更高吗

UPDATE myTable 
SET [col1] = [col1] + 1, 
[col2] = [col2] + 1,
[col3] = [col3] + 1,
... 
[colN] = [colN] + 1

还是多个UPDATE语句,每个语句只有一列?

UPDATE myTable SET [col1] = [col1] + 1
UPDATE myTable SET [col2] = [col2] + 1
UPDATE myTable SET [col3] = [col3] + 1
...
UPDATE myTable SET [colN] = [colN] + 1
4

2 回答 2

6

这可能会因任何一个数据库引擎的特定实现而有所不同,但我将投票认为单个更新通常比连续更新的性能更好。数据库只需要一次找到所需的记录,更新相关的值,并完成它。

现在,考虑到有计划缓存、索引、优化器和其他让事情变得更智能的元素,多更新版本很可能会接近前者的性能,但我的期望是,即使在最好的情况下,前者的表现也会更好。

于 2012-09-13T18:01:46.967 回答
1

毫无疑问,单一语句更有效。每个更新语句都需要将记录取到内存中,对记录执行更新,然后写出结果。

通过多次更新,您必须多次读入记录并多次写出。使用一个语句,您执行此操作一次。

此外,数据库将更改记录到日志文件中,以保持数据的完整性。无论更改的字段数量如何,都会记录每次更新。

当涉及索引、大于内存的表、约束和触发器时,情况会变得更糟。

第二个版本大约需要第一个版本的 N 倍,其中 N 是被修改的列数。

于 2012-09-13T18:13:05.583 回答