【发布时间】:2019-05-21 04:17:05
【问题描述】:
假设您有包含以下列的 TestTable:field1、field2、... fieldn。
什么查询执行得更快:
UPDATE TestTable set field1 = n1;
UPDATE TestTable set field2 = n2;
...
UPDATE TestTable set fieldn = nn;
或
UPDATE TestTable set
field1 = n1,
field2 = n2,
....
fieldn = nn;
【问题讨论】:
-
通常是单个语句,您正在更新整个表,所以单个语句肯定会赢。
-
如果没有
WHERE,则需要扫描整个表。在第一个版本中,这需要完成 n 次。在第二个一次。所以第二个应该表现更好。 -
Postgres 将为前 n-1 次更新创建死行(稍后需要清理),因此单个更新肯定会更快。
-
至少在Oracle中,单语句肯定会跑得更快。不仅由于扫描数据(即“在途中”),而且在保存工作的结果。 Oracle 为每个 UPDATE 生成撤消数据和重做信息等 - 如果您在 n 个 UPDATE 语句中执行此操作,它将为每一行执行 n 次,因此除了(更多)执行时间之外,您还将利用更多资源.
-
顺便说一句,表格有列而不是字段。
标签: mysql sql oracle postgresql