如何加速Oracle上的PK和索引创建

时间:2013-08-08 07:32:53

标签: sql oracle indexing

在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);

有没有办法加快速度?我读到了并行和nologging选项。 Oracle Server有2个CPU,因此并行(n-1 = 2-1 = 1)无济于事。只留下nologging。你能告诉我什么呢?什么是折衷?为什么/你不会使用它?

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

show parameter parallel_max_servers

要并行执行,您可以使用

alter session force parllel ddl parallel 4

除了协调员之外,还将创建8个奴隶。

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

答案 1 :(得分:0)

NOSORT 如果已订购NOTE_NBR,您可以节省时间 通过不排序数据。如果NOTE_NBR是从单线程序列创建的,或者如果您的查询是有序的,那么这可能是真的。

不重新收集索引统计信息创建或重建索引会自动创建索引统计信息。如果你重新收集统计数据 表,cascade=>false可以节省一些时间。默认选项cascade=>dbms_stats.auto_cascade does not really work