以下 SQL 在具有相同架构的两个表之间生成所有匹配记录,然后继续迭代存储此结果集的游标。我在此函数的末尾使用提交进行逐行插入。我的问题是如何从这种类型的查询中获得最大的性能?代码如下:
BEGIN
DECLARE
CURSOR foo IS
SELECT * FROM tableOne to
WHERE EXISTS (SELECT * FROM tableTwo tt
WHERE TO.FOO = TT.FOO
AND TO.BAR = TT.BAR); --THIS TAKES 5 MINUTES (66 MILLION ROWS)
BEGIN
FOR nextFoo IN foo
LOOP
INSERT INTO tracker t
(id,foo,bar,baz)
VALUES(trackerSequence.nextval, nextFoo.foo,nextFoo.bar,nextFoo.baz);
END LOOP;
COMMIT;
END;
END;
此查询可能需要一个多小时,我正在尝试减少与之相关的时间成本。我一般将处理 1.4 亿条记录,因此我预计此过程所需的时间会增加一倍。所有列都被索引。
版本信息:
10克10.2