Muitas razões, na verdade, mas as principais são:
-
Normalmente, os aplicativos cliente aguardam a confirmação de umINSERT
's sucesso antes de enviar o próximo. Portanto, há um atraso de ida e volta para cadaINSERT
, atrasos de agendamento, etc. (PgJDBC suporta pipelineINSERT
s em lotes, mas não conheço nenhum outro cliente que o faça).
-
CadaINSERT
tem que passar por todo o executor. O uso de uma instrução preparada ignora a necessidade de executar o analisador, o reescritor e o planejador, mas ainda há o estado do executor para configurar e desmontar para cada linha.COPY
faz alguma configuração uma vez, e tem um extremamente baixa sobrecarga para cada linha, especialmente quando não há gatilhos envolvidos.
O primeiro ponto é o mais significativo. É tudo sobre viagens de ida e volta da rede e atrasos de reprogramação.