将数据插入Oracle表的最快方法是什么?

我正在PL / SQL中编写一个数据转换来处理数据并将其加载到表中.根据PL / SQL Profiler,转换中最慢的部分之一是实际插入目标表.该表有一个索引.

要准备加载数据,我使用表的行类型填充变量,然后将其插入表中,如下所示:

insert into mytable values r_myRow;

似乎我可以通过执行以下操作来获得性能:

>插入期间关闭注销
>一次插入多个记录

这些方法是否可取?如果是这样,语法是什么?

最好一次插入几百行,使用PL / SQL表和FORALL绑定到insert语句中.有关详细信息,请参阅here.

还要小心如何构造PL / SQL表.如果可能的话,更喜欢使用“INSERT INTO t1 SELECT …”直接在SQL中完成所有转换,因为在PL / SQL中逐行操作仍然比SQL慢.

在任何一种情况下,您还可以使用INSERT / * APPEND * /来使用直接路径插入,这基本上绕过了数据库缓存并直接分配新数据块并将其写入数据文件.这也可以减少日志记录量,具体取决于您使用它的方式.这也有一些影响,所以请先阅读fine manual.

最后,如果要截断并重建表,则首先删除(或标记不可用)并稍后重建索引可能是值得的.

翻译自:https://stackoverflow.com/questions/143872/what-is-the-fastest-way-to-insert-data-into-an-oracle-table

转载注明原文:将数据插入Oracle表的最快方法是什么?