Проблема производительности с Oracle BULK FETCH и вставкой FORALL - PullRequest
1 голос
/ 09 октября 2010

Я пытаюсь скопировать записи из одной таблицы в другую как можно быстрее.

В настоящее время у меня есть простой цикл курсора, похожий на этот:

FOR rec IN source_cursor LOOP
   INSERT INTO destination (a, b) VALUES (rec.a, rec.b)
END LOOP;

Я хочу ускорить егочтобы быть очень быстрым, поэтому я пытаюсь выполнить некоторые операции BULK (BULK FETCH, а затем вставку FORALL):

Вот то, что я имею для массовой вставки select / forall.Моя проблема в том, что пока я не вижу большого прироста производительности.Из того, что я прочитал, это должно быть в 10-100 раз быстрее.

Неужели я где-то упускаю узкое место?

Ответы [ 2 ]

7 голосов
/ 09 октября 2010

Единственное преимущество вашего кода перед простым INSERT + SELECT заключается в том, что вы сохраняете исключения, плюс (как указывает Джастин) у вас есть бессмысленный ORDER BY, который заставляет его выполнять большую часть бессмысленной работы , В любом случае, у вас нет кода, чтобы что-либо делать с сохраненными исключениями.

Я бы просто реализовал это как INSERT + SELECT.

0 голосов
/ 24 ноября 2016

Вам не нужно использовать циклы без необходимости, пока это не потребуется в самой кодировке.

...