Разница в производительности "вставить в выбор" против "выберите и цикл для вставки" - PullRequest
1 голос
/ 17 августа 2011

Есть ли какие-либо преимущества в производительности в

INSERT INTO table1( column1) select * from table2;

по сравнению с

BEGIN
FOR t2Row IN SELECT * FROM table2 LOOP
   EXECUTE 'INSERT INTO ...'
END LOOP;
END;

В основном интересен движок postgresql db.Я считаю, что первый запрос потребляет больше памяти, поскольку он буферизирует весь результат, но первый запрос быстрее?

1 Ответ

2 голосов
/ 17 августа 2011

Есть ТАК ответ, который затрагивает эту тему здесь: RBAR против программирования на основе множеств для SQL

Я бы сказал, что первый подход намного быстрее, чем второй, поскольку он основан на множествах (как упомянуто marc_s).

Кроме того, второй метод включает в себя переключение на SQL, а затем обратно для каждой итерации цикла. Я не являюсь пользователем Postgres, но в Oracle это может привести к снижению производительности только при переключении контекста, в зависимости от количества задействованных записей, это может быть очень значительным.

Первый метод также самый простой, и в большинстве сред самый простой метод - самый простой в поддержке.

Хотя, чтобы ответить на ваш вопрос, первый метод быстрее, чем второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...