Bastantes razones, en realidad, pero las principales son:
-
Por lo general, las aplicaciones cliente esperan la confirmación de un
INSERT
el éxito antes de enviar el siguiente. Entonces, hay un retraso de ida y vuelta para cadaINSERT
, retrasos en la programación, etc. (PgJDBC admite canalizaciónINSERT
s en lotes, pero no conozco ningún otro cliente que lo haga). -
Cada
INSERT
tiene que pasar por todo el ejecutor. El uso de una declaración preparada evita la necesidad de ejecutar el analizador, la reescritura y el planificador, pero todavía hay un estado de ejecución para configurar y desmontar para cada fila.COPY
hace algo de configuración una vez y tiene un extremadamente baja sobrecarga para cada fila, especialmente cuando no hay disparadores involucrados.
El primer punto es el más significativo. Se trata de viajes de ida y vuelta en la red y retrasos en la reprogramación.