Właściwie z wielu powodów, ale najważniejsze z nich to:
-
Zazwyczaj aplikacje klienckie czekają na potwierdzenie jednego
INSERT
sukces przed wysłaniem następnego. Tak więc istnieje opóźnienie w obie strony dla każdegoINSERT
, opóźnienia planowania itp. (PgJDBC obsługuje potokINSERT
s w partiach, ale nie znam żadnych innych klientów, którzy to robią). -
Każda
INSERT
musi przejść przez całego wykonawcę. Użycie przygotowanej instrukcji omija potrzebę uruchomienia parsera, rewritera i planera, ale nadal istnieje stan executora do skonfigurowania i usunięcia dla każdego wiersza.COPY
robi trochę konfiguracji raz i ma niezwykle niski narzut dla każdego wiersza, zwłaszcza gdy nie są zaangażowane żadne wyzwalacze.
Najważniejszy jest pierwszy punkt. Wszystko sprowadza się do połączeń w obie strony i zmiany harmonogramu opóźnień.