0

我写了一个这样的 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;

我注意到第一个查询获取相对于第二个、第三个和更多查询需要很长时间才能完成。

  • 这是预期的行为吗?

  • 有人可以解释幕后发生的事情导致这种情况吗?

4

1 回答 1

0

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

此“获取”的第一次执行LIMIT 1000可能需要更多时间,因为

  • 它为查询构建执行计划
  • 它会为每次提取进行必要的其他准备工作

此外,根据您的数据库服务器架构(例如 >1 proc),当您处理第一次提取的结果时,第二次提取正在并行处理,使第二次提取看起来更短(下一次提取也一样)。

于 2016-06-17T11:30:05.717 回答