2

在 880 mio 行上创建 PK 和索引大约需要 1:15 小时。

询问:

 alter table STG.NOTES add constraint PK_NOTES primary key (NOTES_SK);
 create unique index STG.BK_NOTES on STG.NOTES (NOTE_NBR ASC);

有没有办法加快这个速度?我阅读了并行和无日志记录选项。Oracle 服务器有 2 个 CPU,因此并行 (n-1 = 2-1 = 1) 无济于事。只留下nologging。你能告诉我什么吗?什么是权衡?为什么会/不会使用它?

编辑:也许我还需要解释索引创建的上下文是什么:

  1. 截断目标表,然后在目标表上删除 PK 和索引

  2. 从源中选择并批量插入目标

  3. 在目标表上创建索引和 PK(= 1:15 小时)

4

2 回答 2

1

实际上,您可以在具有 2 个内核的 PC 上使用更高程度的并行性。检查parallel_max_servers您的数据库中的默认设置。

show parameter parallel_max_servers

要并行执行,您可以使用

alter session force parllel ddl parallel 4

除了协调器之外,还将创建 8 个从属服务器。

关于nologging,我认为这是一个不错的选择。usingnologging意味着在发生灾难时,您必须重新创建索引。如果索引创建过程是例行公事,可以考虑。

于 2013-08-08T07:45:49.227 回答
0

NOSORT如果NOTE_NBR已经订购,您可以通过不对数据进行排序来节省时间。如果 NOTE_NBR 是从单线程序列创建的或者如果您的查询是有序的,这可能是正确的。

不要重新收集索引统计信息创建或重建索引会自动创建索引统计信息。如果重新收集表上的统计信息,cascade=>false可以节省一些时间。默认选项,cascade=>dbms_stats.auto_cascade 并没有真正起作用

于 2013-08-09T04:49:30.380 回答