直接路径插入是在Oracle中进行批量插入的好方法吗?

时间:2009-07-30 14:07:55

标签: oracle oracle10g bulkinsert optimizer-hints

我们正试图找出使用Oracle(10gR2)处理BULK INSERT的最佳方法,我发现它可能是一个非常复杂的主题。我发现的一种方法涉及使用Append optimizer提示:

INSERT /*+ Append*/
INTO some_table (a, b)
VALUES (1, 2)

我的理解是,这将告诉Oracle忽略索引,只将结果放在表的末尾。然后,我所要做的就是重建索引:

ALTER INDEX some_index REBUILD

这比尝试将SQL * Loader作为外部进程或执行某些pl / SQL更容易。这几乎看起来太容易了。有什么我想念的吗?如果我采用这种方法,任何可能会让我感到困惑的东西?

1 个答案:

答案 0 :(得分:2)

一些笔记......

  1. 无法追加单行,因此APPEND仅对INSERT INTO ... SELECT FROM语法有效。
  2. 附加是在表格的高水位线上方添加数据,其中数据被格式化为完整的块,然后写入表格并绕过SQL引擎
  3. 并行模式下的追加要求每个并行查询线程为表中分配至少一个新范围,新块写入该表中。这可能浪费空间。
  4. 不会忽略索引,但是在将块写入表中之前,会对它们进行维护。
  5. 有关更重要的信息,请参阅他的文档:http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm#ADMIN01509