Un bel po' di ragioni, in realtà, ma le principali sono:
-
In genere, le applicazioni client attendono la conferma di un
INSERT
Il successo prima di inviare il successivo. Quindi c'è un ritardo di andata e ritorno per ogniINSERT
, ritardi nella pianificazione e così via (PgJDBC supporta la pipelineINSERT
s in batch, ma non sono a conoscenza di altri client che lo fanno). -
Ogni
INSERT
deve passare attraverso l'intero esecutore. L'uso di un'istruzione preparata evita la necessità di eseguire il parser, il rewriter e il pianificatore, ma c'è ancora lo stato dell'esecutore da impostare e smontare per ogni riga.COPY
esegue alcune impostazioni una volta e ha un estremamente basso sovraccarico per ogni riga, soprattutto quando non sono coinvolti trigger.
Il primo punto è il più significativo. Si tratta di viaggi di andata e ritorno della rete e ritardi di riprogrammazione.