2015-08-17 5 views
3

согласно документации,разница между INSERT и COPY

Загрузка большого количества строк с помощью COPY всегда быстрее, чем при использовании INSERT, даже если ГОТОВИШЬ используется и несколько вставок дозируют в одной транзакции.

Почему COPY быстрее, чем INSERT (множественная вставка сгруппирована в одну транзакцию)?

ответ

5

Целый ряд причин, на самом деле, но основными из них являются:

  • Обычно клиентские приложения ждать подтверждения одного успеха INSERT «s перед отправкой следующего. Таким образом, для каждого существует задержка с обратным проходом, задержки при планировании и т. Д. (PgJDBC поддерживает пакетное планирование INSERT с, но я не знаю других клиентов, которые это делают).

  • Каждый INSERT должен пройти через весь исполнитель. Использование подготовленного заявления обходит необходимость запуска анализатора, перезаписывающего устройства и планировщика, но все еще существует состояние исполнителя для настройки и срыва для каждой строки. COPY делает некоторую настройку один раз и имеет крайне низкие накладные расходы для каждой строки, особенно там, где не задействованы триггеры.

Первый пункт является самым значительным. Все дело в сетевых поездках и перепланировке.

1

Это потому, что COPY - это отдельный оператор, в то время как каждый INSERT является отдельным заявлением. Поскольку каждый отдельный оператор обычно подлежит регистрации (manual), даже внутри уникальной транзакции использование множества INSERT происходит медленнее, чем использование одного COPY.

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