Faktiskt en hel del anledningar, men de viktigaste är:
-
Vanligtvis väntar klientprogram på bekräftelse av en
INSERT
s framgång innan du skickar nästa. Så det finns en fördröjning tur och retur för varjeINSERT
, schemaläggningsförseningar, etc. (PgJDBC stöder pipelineingINSERT
s i omgångar, men jag känner inte till några andra klienter som gör det). -
Varje
INSERT
måste gå igenom hela exekutorn. Användning av en förberedd sats förbigår behovet av att köra tolken, omskrivaren och planeraren, men det finns fortfarande exekveringsläge att ställa in och riva ner för varje rad.COPY
gör vissa inställningar en gång och har en extremt låg overhead för varje rad, speciellt där inga utlösare är inblandade.
Den första punkten är den viktigaste. Allt handlar om nätverksresor och omläggning av förseningar.