Oracle 如何改进此更新脚本?

Oracle 如何改进此更新脚本?,oracle,oracle11g,sql-update,Oracle,Oracle11g,Sql Update,我想更新oracle中有155.750行的表。 我这样写: UPDATE Table1 R SET R.TOTAL = (SELECT SUM(T.TOTALS_TO_DATE) FROM Table2 T WHERE T.ID= R.ID AND T.TYPE = 'type5'); 表1的索引位于ID 表2的索引位于ID和TYPE。 这是没有反应的。如何编辑此文件以快速运行 如果我写这个select,它运行得很快 SELECT SUM(T.TOTALS_TO_DATE),R.ID

我想更新oracle中有155.750行的表。 我这样写:

 UPDATE Table1 R
SET R.TOTAL = 
(SELECT SUM(T.TOTALS_TO_DATE)
FROM Table2 T
WHERE T.ID= R.ID
AND T.TYPE = 'type5');
表1的索引位于
ID
表2的索引位于
ID
TYPE
。 这是没有反应的。如何编辑此文件以快速运行

如果我写这个select,它运行得很快

 SELECT SUM(T.TOTALS_TO_DATE),R.ID
    FROM Table2 T,Table1 R
    WHERE T.ID= R.ID
    AND T.TYPE = 'type5' 
  group by R.ID ;
这会运行,但我不明白为什么更新脚本需要3000秒


谢谢。

您忘记在更新脚本中放置
where
条件。因此,它正在更新整个表1,因此需要时间

对于
select
查询,您提到了运行更快的
where
子句

编辑:-

检查我们的这个

下面是一些步骤,您可以执行这些步骤来提高update命令的运行速度

  • 正在删除要更新的列上的索引
  • 以较小的批执行更新
  • 禁用删除触发器
  • 用大容量插入操作替换Update语句

  • 尝试使用
    MERGE
    语句

    MERGE INTO table1 R using
    ( SELECT SUM(T.TOTALS_TO_DATE) S, T.ID
        FROM Table2 T
        WHERE T.TYPE = 'type5' 
      group by T.ID 
    ) T
    ON ( R.ID = T.ID)
    WHEN MATCHED THEN UPDATE SET R.TOTAL = T.S
    ;
    

    感谢您的回答,但是把where子句放在select查询的更新脚本中?如何更改它您必须在没有任何条件的情况下更新表的“总计”列中的所有行吗?是的,我想更新每一行,但当我写入“选择”时,它会在1秒内返回所有数据。更新了我的答案。这种方法用于更新具有大量数据的列。我没有关于更新列的索引,也没有删除触发器。我会尝试你提到的其他解决方案。它运行速度很快。我想确定它是否正确运行?谢谢你的回答。更新也一样吗?所以为什么这么快:)我需要知道这和我调查记录的更新脚本是一样的。合并Statement只适用于oracle?thanks@user1716182在更新语句中,对搜索行执行求和计算的子查询(155.750次)。在MERGE语句中,子查询只执行一次。