Является ли прямая вставка хорошим способом выполнения массовых вставок в 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 ответ
Несколько заметок...
- Невозможно добавить одну строку, поэтому APPEND действителен только с синтаксисом INSERT INTO ... SELECT FROM.
- Добавление - это добавление данных над верхней отметкой таблицы, в которой данные форматируются в полные блоки, которые затем записываются в таблицу и обходят механизм SQL.
- Добавление в параллельном режиме требует, чтобы каждый поток параллельных запросов выделял по крайней мере один новый экстент для таблицы, в которую записываются новые блоки. Это может быть расточительным.
- Индексы не игнорируются, но их обслуживание игнорируется до тех пор, пока блоки не будут записаны в таблицу.
См. Он документы для получения более важной информации: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm