【问题标题】:What query is faster: one update with multiple sets or multiple updates with one set?什么查询更快:一次更新多组还是一组多更新?
【发布时间】: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


【解决方案1】:

SQL 是基于集合的。任何时候只要一次操作就可以处理一组数据,通常情况会更好。

【讨论】:

    【解决方案2】:

    好问题。试着这样想。

    每个集合操作花费的时间可以忽略不计
    对于每个 UPDATE = n 检查

    更新 n1 = n
    更新 n2 = n
    更新 n3 = n

    所以本质上,对于 n 次更新,您正在检查 n 行 n 次,因此您正在查看 n^2 总检查。 但是,如果您使用 SINGLE UPDATE 功能,您只需检查一次 n 行。

    因此,第二种选择要好得多。

    【讨论】:

    • 除了操作次数之外,别忘了应用服务器和数据库服务器之间的延迟!毫秒加起来。
    • 你完全正确!我主要是从高层次上看这个,以免在技术上对 OP 过于重视 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多