嗨,我有两张表,每张都有百万行。我有 oracle 11 g R1 我相信我们中的许多人一定经历过这种情况。
从一个表更新到另一个值不同的表的最有效和快速的方法是什么。
例如:表 1 有 4 个 NUMBER 列,精度很高,例如:0.2212454215454212
表 2 有 6 列。根据两个表上的公共列更新表 2 的四列,只有不同的列。
我有这样的东西
DECLARE
TYPE test1_t IS TABLE OF test.score%TYPE INDEX BY PLS_..;
TYPE test2_t IS TABLE OF test.id%TYPE INDEX BY PLS..;
TYPE test3_t IS TABLE OF test.Crank%TYPE INDEX BY PLS..;
vscore test1_t;
vid test2_t;
vurank test4_t;
BEGIN
SELECT id,score,urank
BULK COLLECT INTO vid,vscore,vurank
FROM test;
FORALL i IN 1 .. vid.COUNT
MERGE INTO final T
USING (SELECT vid (i) AS o_id,
vurank (i) AS o_urank,
vscore (i) AS o_score FROM DUAL) S
ON (S.o_id = T.id)
WHEN MATCHED THEN
UPDATE SET T.crank = S.o_crank
WHERE T.crank <> S.o_crank;
由于数字具有高精度,它会变慢吗?
如果我必须更新 100 万行,我尝试了批量收集和合并组合仍然需要 30 分钟的最坏情况。
有什么与rowid有关的吗?帮助将不胜感激。