Каков наилучший способ вставить 6000000 записей из одной таблицы в другую таблицу в ORACLE? - PullRequest
0 голосов
/ 04 февраля 2019

Здравствуйте, ребята, мне нужно скопировать 6000000 строк из TMP_DATA в DATA, каков наилучший способ сделать это?

Я думал о том, чтобы сделать INSERT INTO DATA SELECT * FROM TMP_DATA.Но я думаю, что потребуется много времени, чтобы сделать вставку.

Что вы предлагаете?

С уважением,

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Чтобы немного расширить ответ Андерса и комментарии mathguy, сделайте следующее:

alter table data nologging;
alter session enable parallel dml;
-- disable any triggers on `data` and temporarily drop any indexes

insert /*+ append */ * into data 
select /*+ parallel (4) */ * from tmp_data
--sample (10)  -- if tmp_data has 60 million rows: 10 means 10%
-- where rownum < 6000001 
-- pick one of the two prior clauses if tmp_table has > 6 million rows

после завершения вставки:

alter table data nologging;  
-- enable triggers and recreate indexes

и пусть dba сделает резервную копиюпоскольку таблица data будет не восстановлена, если после загрузки возникла какая-либо проблема.

0 голосов
/ 04 февраля 2019

Есть несколько способов сделать это:

Если вы хотите, чтобы скорость использовалась параллельно и поддерживалась так (на новой таблице):

- Предостережение: этот метод быстрый, нобудет использовать много ресурсов процессора, поэтому просто сообщите

- администратор базы данных знает.Кроме того, индексируйте таблицу в конце.

create table DATA SELECT parallel 4 nologging as
select * from TMP_DATA;

Если вы используете существующую таблицу, одной из вещей, которые могут потенциально снизить производительность вставки, является использование индексов.Вы можете временно отключить индекс, чтобы разрешить более быстрые вставки.

...