Всъщност има доста причини, но основните са:
-
Обикновено клиентските приложения чакат потвърждение на един
INSERT
успех, преди да изпрати следващия. Така че има двупосочно забавяне за всекиINSERT
, закъснения при планиране и т.н. (PgJDBC поддържа конвейерна обработкаINSERT
s в партиди, но не знам за други клиенти, които го правят). -
Всеки
INSERT
трябва да премине през целия екзекутор. Използването на подготвен оператор заобикаля необходимостта от стартиране на анализатора, пренаписването и планирането, но все още има състояние на изпълнител, което да се настрои и разруши за всеки ред.COPY
прави някои настройки веднъж и има изключително ниски режийни разходи за всеки ред, особено когато не са включени тригери.
Първата точка е най-важната. Всичко е свързано с мрежови обиколки и закъснения при пренасрочване.