Właściwie z wielu powodów, ale najważniejsze z nich to:
-
Zazwyczaj aplikacje klienckie czekają na potwierdzenie jednego
INSERTsukces przed wysłaniem następnego. Tak więc istnieje opóźnienie w obie strony dla każdegoINSERT, opóźnienia planowania itp. (PgJDBC obsługuje potokINSERTs w partiach, ale nie znam żadnych innych klientów, którzy to robią). -
Każda
INSERTmusi 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.COPYrobi 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ń.