我有一个代码,其中有循环来处理数百万条记录。代码如下所示:
FOR C1
IN (SELECT a
FROM tbl1
WHERE <some conditions>)
LOOP
/*Some processing which took less than a sec to process a record*/
/*Call to procedures and functions.*/
END LOOP;
上面的循环代码可以在4秒内处理大约9条记录。我有数百万条记录要通过循环处理。
执行此任务的最佳方法是什么? 我可以并行执行循环内的逻辑吗?
答案 0 :(得分:2)
&#34;我可以并行执行循环中的逻辑吗?&#34;
谁能说出来?您还没有提供足够的信息来继续。我的意思是它甚至不清楚驱动查询是否适合分成合适的块。
并行可能会有所帮助,但它并不能保证。这取决于你拥有多少CPU,正在进行的其他工作,以及基本流程的确切性质:即使其中一个&#34;调用程序和函数&#34;发出锁定你有一个基本的串行过程。&#34;执行此任务的最佳方法是什么?
一般建议是降低每条记录的个人时间:
您是否需要将其作为逐行操作?使用纯SQL的集合操作可能比PL / SQL循环更快。同样,这取决于您正在做什么的具体细节。
使用PL / SQL分析。 11g中的Oracle DBMS_HPROF tool在精确指出所有时间的位置时都是一个奇迹。不幸的是,它需要DBA授予访问权限并创建目录对象,但它绝对值得为它提出RFC。 Find out more。 (在早期版本中,DBMS_PROFILER虽然有用但有点受限;它还需要DBA干预。)