1

我想在 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');

Table1 的索引位于ID Table2 的索引位于IDTYPE。这没有响应。如何编辑它以快速运行?

如果我写这个选择它运行得很快。

 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 秒。

谢谢。

4

2 回答 2

2

尝试使用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
;
于 2013-08-15T09:09:02.050 回答
1

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

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

编辑:-

检查我们的这个链接

以下是您可以执行的一些步骤,以提高更新命令的运行速度。

  1. 删除要更新的列上的索引。
  2. 以较小的批次执行更新。
  3. 禁用删除触发器。
  4. 用 Bulk-Insert 操作替换 Update 语句。
于 2013-08-15T08:35:05.277 回答