使用批量收集时设置LIMIT的值

时间:2016-07-29 13:07:56

标签: oracle plsql plsqldeveloper oracle11gr2

我想知道我们是否有任何技术可以计算出需要为批量收集操作的LIMIT子句设置的值。 例如下面,假设我们的光标有1000万条记录。我们可以为LIMIT子句设置的值是什么,以获得最佳性能。我们有什么方法可以计算它。

decalre
cursor c_emp is <some select query>

var  <variable> ;

begin
     open c_emp;
       loop
           fetch c_emp bulk collect into var limit 2;
           exit when c_emp%NOTFOUND;
      end loop;
     close c_emp;
  end;

1 个答案:

答案 0 :(得分:6)

在游标FOR LOOP中使用隐式游标。它使代码更简单,默认值100几乎总是足够好。

我看到很多人浪费了很多时间来担心这件事。如果您考虑为什么批量收集可以提高性能,您将理解为什么大数字无法帮助。

批量收集通过减少SQL和PL / SQL之间的上下文切换来提高性能。想象一下极不可能的最坏情况,其中上下文切换耗尽了所有运行时间。限制为2可消除50%的上​​下文切换; 10消除了90%; 100消除了99%等。将其绘制出来并且你会发现它不值得找到最佳极限尺寸:

enter image description here

使用默认值。花时间担心更重要的事情。