Faktiskt en hel del anledningar, men de viktigaste är:
-
Vanligtvis väntar klientprogram på bekräftelse av en
INSERTs 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 pipelineingINSERTs i omgångar, men jag känner inte till några andra klienter som gör det). -
Varje
INSERTmå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.COPYgö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.