こんにちは、それぞれに 100 万行の 2 つのテーブルがあります。私は oracle 11 g R1 を持っています。私たちの多くがこの状況を経験したに違いないと確信しています。
値が異なるテーブルから別のテーブルに更新する最も効率的で高速な方法は何ですか。
例: 表 1 には、精度の高い 4 つの NUMBER 列があります。例: 0.2212454215454212
表 2 には 6 つの列があります。両方のテーブルの共通の列に基づいて、テーブル 2 の 4 つの列を更新します。
私はこのようなものを持っています
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;
数値が高精度なので遅くなっていませんか?
Bulk Collect と Merge の組み合わせを試してみましたが、100 万行を更新する必要がある場合、最悪のシナリオではまだ 30 分ほどかかります。
ローイドに何かありますか?助けていただければ幸いです。