2

Oracle 11g 是否优化了数组上的 For 循环?如果是这样,它是如何做到的?

示例:
以下代码是否将每个实例lt_some_array(i)视为指向数组中索引处记录的指针i?或者,它是否每次都查找它?

FOR i IN lt_some_array.FIRST..lt_some_array.LAST
LOOP
   field1 := lt_some_array(i).field1;
   field2 := lt_some_array(i).field2;
   field3 := lt_some_array(i).field3;
   field4 := lt_some_array(i).field4;
   field5 := lt_some_array(i).field5;
   field6 := lt_some_array(i).field6;
   do_something();
END LOOP;

澄清:
编译器是否将其视为如下(其中 lr_some_row 是指针而不是副本):

FOR i IN lt_some_array.FIRST..lt_some_array.LAST
LOOP
   lr_some_row := lt_some_array(i);
   field1 := lr_some_row.field1;
   field2 := lr_some_row.field2;
   field3 := lr_some_row.field3;
   field4 := lr_some_row.field4;
   field5 := lr_some_row.field5;
   field6 := lr_some_row.field6;
   do_something();
END LOOP;
4

1 回答 1

1

是的,Oracle 11g 为您执行该优化。

该功能是在 10g 中添加的。请参阅演示文稿“PL/SQL 性能 - 揭穿神话”的第 60 页。它包含一个与您的代码非常相似的示例。手动优化在 9iR2 中几乎快两倍,但在 10gR1 中根本没有帮助。

虽然我不能告诉你甲骨文是如何做到的。据我所知,关于 Oracle 工作原理的详细程度并不存在。

于 2012-08-14T17:31:54.900 回答