Fetch-Bulk-Collect with ForAll timing irregularities

时间:2013-10-02 22:37:15

标签: sql oracle plsql bulkinsert

我写了一个像这样的SQL查询:

LOOP

FETCH cursorA
   BULK COLLECT INTO structure1 LIMIT 1000;

EXIT WHEN structure1.COUNT = 0;

FORALL i IN 1 .. structure1.COUNT
   -- do something;

--write time it took to finish loop

END LOOP;

我注意到第一次查询提取需要很长时间才能完成相对于第二,第三和其他查询。

  • 这是预期的行为吗?

  • 有人可以解释一下幕后发生的事情吗?

1 个答案:

答案 0 :(得分:0)

据我们所知,这种行为并没有错。

第一次执行此操作"获取LIMIT 1000"可能需要更多时间,因为

  • 它为查询构建执行计划
  • 它执行每次提取所需的其他准备工作

此外,根据您的数据库服务器体系结构(例如&gt; 1 proc),当您处理第一次提取的结果时,第二次提取正在并行处理,使第二次提取 看起来< / em> 更短(也适用于下一个)。