Является ли прямая вставка хорошим способом выполнения массовых вставок в Oracle?

Мы пытаемся найти наилучший способ обработки BULK INSERT с использованием Oracle (10gR2), и я обнаружил, что это может быть довольно сложным предметом. Один метод, который я нашел, включает в себя использование подсказки оптимизатора добавления:

INSERT /*+ Append*/
INTO some_table (a, b)
VALUES (1, 2)

Насколько я понимаю, это скажет Oracle игнорировать индексы и просто поместить результаты в конец таблицы. Затем все, что мне нужно сделать, это перестроить индексы:

ALTER INDEX some_index REBUILD

Это было бы проще, чем пытаться запустить SQL*Loader как внешний процесс или выполнить какой-либо pl/SQL. Это кажется слишком легким. Я что-то упускаю? Любые вещи, которые могут вернуться, чтобы укусить меня, если я воспользуюсь этим подходом?

1 ответ

Несколько заметок...

  1. Невозможно добавить одну строку, поэтому APPEND действителен только с синтаксисом INSERT INTO ... SELECT FROM.
  2. Добавление - это добавление данных над верхней отметкой таблицы, в которой данные форматируются в полные блоки, которые затем записываются в таблицу и обходят механизм SQL.
  3. Добавление в параллельном режиме требует, чтобы каждый поток параллельных запросов выделял по крайней мере один новый экстент для таблицы, в которую записываются новые блоки. Это может быть расточительным.
  4. Индексы не игнорируются, но их обслуживание игнорируется до тех пор, пока блоки не будут записаны в таблицу.

См. Он документы для получения более важной информации: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm

Другие вопросы по тегам