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