2013-11-07 5 views
2

Я хочу переместить 1 миллион строк данных в другую таблицу. Im с использованием запроса:Переместить большие данные между таблицами в оракуле с объемной вставкой

insert into Table1 
select * from Table2; 

в моей функции PL/SQL. Но этот путь слишком медленный.

Как это сделать с Насыпная вставка метод?

  • Таблица источника и назначения имеет ту же структуру.
  • Таблицы имеют хэш-раздел и 1 индекс.
+2

У вас отключены ограничения и индексы на целевой таблице во время вставки? –

+0

Нет, я не сделал. Нужно ли мне? – Jack

+0

Обновление индексов подряд за строкой происходит намного медленнее, чем восстановление их после. –

ответ

4

Забудьте о массовой вставке. Потому что вставка в выбор - это лучшая масса, которую вы можете загрузить. Быстрее бы отключить индексы (пометить их непригодными для использования) и сделать это в одной вставки:

insert /*+ append */ into TARGET 
select COLS 
    from SOURCE; 

commit; 

и перестроить индексы с помощью UNRECOVERABLE (и, возможно, даже параллельно).

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

РАЗВЕЙТЕ:

Проверьте производительность ниже выберите

SELECT /*+ PARALLEL(A 4) 
      USE_HASH(A) ORDERED */ 
     YOUR_COLS 
FROM 
     YOUR_TABLE A 
WHERE 
     ALL_CONDITIONS; 

Если быстрее, то

INSERT /*+ APPEND */ 
    INTO 
     TARGET 
    SELECT /*+ PARALLEL(A 4) 
      USE_HASH(A) ORDERED */ 
      YOUR_COLS 
    FROM 
      YOUR_TABLE A 
    WHERE 
      ALL_CONDITIONS; 
+0

Таблицы имеют хэш-раздел и 1 индекс. Как сделать параллельную вставку. – Jack

+0

Имейте в виду, что не будет большого улучшения, если новая таблица будет записана во вновь созданное табличное пространство. Потому что в APPEND нет необходимости использовать свежий TBS. – SriniV

+3

Я согласен, что одна вставка - это путь. И использование [direct-path inserts] (http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables.htm#ADMIN01509) может значительно повысить производительность (но помните, что ваши данные не будут восстановлены до тех пор, пока следующая резервная копия!). NOLOGGING следует использовать вместо устаревших UNRECOVERABLE, параллелизм не требует разделения, а подсказки USE_HASH и ORDERED ничего не сделают. –

Смежные вопросы