在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。你能告诉我什么呢?什么是折衷?为什么/你不会使用它?
编辑: 也许我还需要解释索引创建的上下文是什么:
截断目标表,然后在目标表上删除PK和索引
从源代码中选择并批量插入目标
在目标表上创建索引和PK(= 1:15小时)
答案 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。