【发布时间】:2017-11-22 12:02:18
【问题描述】:
我有两张大桌子:
Table1 (from_id, to_id, field1, field2, field3) ~ 500K 行
Table2 (id_num, field1, field2, field3) ~4M 行
我需要根据 Table2.id_num 从 Table1 数据中更新 Table2,Table2.id_num 应该在 Table1.from_id 和 Table1.to_id 之间。
在两个表中 - ID 值可以在 16,000,000 和 4,300,000,000 之间变化。
我运行了以下光标脚本,但它运行了几个小时,还没有完成。
DECLARE
l_FROM_ID Table1.FROM_ID%TYPE;
l_TO_ID Table1.TO_ID%TYPE;
l_Field1 Table1.Field1%TYPE;
l_Field2 Table1.Field1%TYPE;
l_Field3 Table1.Field1%TYPE;
CURSOR cur
IS
SELECT
FROM_ID, TO_ID, Field1, Field2, Field3
FROM
Table1 ;
BEGIN
OPEN cur;
LOOP
FETCH cur INTO
l_FROM_ID,
l_TO_ID,
l_Field1,
l_Field2,
l_Field3 ;
UPDATE
table2 t
SET
t.field1 = l_field1,
t.field2 = l_field2,
t.field3 = l_field3
WHERE t.id_num >= l_FROM_ID and t.id_num <= l_TO_ID;
commit;
END LOOP;
CLOSE cur;
end;
关于如何提高效率的任何想法?
【问题讨论】:
标签: sql oracle cursor query-performance sql-tuning