1

我们正在尝试找出使用 Oracle (10gR2) 处理 BULK INSERT 的最佳方法,我发现这可能是一个相当复杂的主题。我发现的一种方法涉及使用 Append 优化器提示:

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

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

ALTER INDEX some_index REBUILD

这比尝试将 SQL*Loader 作为外部进程启动或执行一些 pl/SQL 更容易。这似乎太容易了。有什么我想念的吗?如果我采取这种方法,有什么事情会反过来咬我吗?

4

1 回答 1

2

一些笔记...

  1. 不能追加单行,因此 APPEND 仅对 INSERT INTO ... SELECT FROM 语法有效。
  2. 追加是在表的高水位线之上添加数据,其中数据被格式化成完整的块,然后写入表并绕过 SQL 引擎
  3. 并行模式下的追加要求每个并行查询线程至少为表分配一个新范围,新块将写入其中。这可能会浪费空间。
  4. 索引不会被忽略,但它们的维护会延迟到块被写入表中。

有关更多重要信息,请参阅他的文档:http: //download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm#ADMIN01509

于 2009-07-30T15:04:13.107 回答