我想更新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 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秒。
感谢。
答案 0 :(得分: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
;
答案 1 :(得分:1)
您忘记将where
条件放在更新脚本中。因此它正在更新整个table1,因此需要时间。
对于select
查询,您提到了运行速度更快的where
子句。
编辑: -
查看我们的link
以下是一些可以更快地提高更新命令的步骤。