Oracle

如何快速插入數據作為選擇

  • September 10, 2019

在 Oracle DB 中有大約 200M 行(大約 20GB 數據),我想通過

insert into foo select * from bar where some_unimportant=condition;

如果我總是可以刪除 foo 表並在出現任何問題時重做插入,我該如何以最快的方式做到這一點?就像,我不需要能夠回滾。因為我可以刪除 foo 表,所以我也可以完全控制它的創建,如果有一些好的選項可以用來加速插入。

當然,在插入之後,我希望表表現得像一個普通的表(支持使用回滾等撤消)

更新:該表是作為物聯網創建的,所以我想這會改變一些事情。我應該跑嗎

alter index foo_pk nologging;

還?

使用 Direct-Path INSERT 提高 INSERT 性能

例子:

alter table foo nologging;
alter session force parallel query parallel 8;
alter session force parallel dml parallel 8;
insert /*+ append */ into foo select * from bar where some_unimportant=condition;

我認為如果你不關心FOO’並且可以自由地丟棄它,只需將它丟棄並使用並行製作一個CTAS,它將是最快的。使用 Balazs Papp 建議的更改會話,也許添加第三個會話(強制並行 DDL)。

引用自:https://dba.stackexchange.com/questions/247358