Oracle 如何改进此更新脚本?
我想更新oracle中有155.750行的表。 我这样写: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
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命令的运行速度
尝试使用
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语句中,子查询只执行一次。