我有两张大 table :
表1(from_id,to_id,field1,field2,field3)~500K行
表2(id_num,field1,field2,field3)~4M行
我需要根据Table2.id_num更新Table2数据中的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;
关于如何提高效率的任何想法?
2 回答
有很多方法可以加速这一点 . 首先,我会尝试一下
如果您的数据库服务器配置为OLAP(如etl / elt进程) . 您可以使用所需的值创建新表,而不是更新,并删除现有表 .
这种方式对于大型 table 会更好 .
创建表Newtable nologging pctfree 0作为select t1.field1,t1.field2,t.field3,.. t2.columns要保留table1 t1,tab2 t2,其中t1.form_id = t2.to_id .
我希望这有帮助
谢谢Thangamani Eraniyan