AFAIK nie jest grupowaniem po stronie serwera w fe/be protokół
, więc PgJDBC nie może go użyć. . Aktualizuj :Cóż, myliłem się. PgJDBC (dokładne od 9.3) tak wysyłaj partie zapytań na serwer jeśli nie musi on pobierać wygenerowanych kluczy . Po prostu kolejkuje kilka zapytań w buforze wysyłania bez synchronizacji z serwerem po każdym pojedynczym zapytaniu.
Zobacz:
- Problem #15:Włącz grupowanie podczas zwracania wygenerowanych kluczy
- Problem #195:PgJDBC nie przesyła potoków partii zwracających wygenerowane klucze
Nawet w przypadku żądania wygenerowanych kluczy rozszerzone zapytanie protokół służy do zapewnienia, że tekst zapytania nie musi być wysyłany za każdym razem, tylko parametry.
Szczerze mówiąc, wsadowe JDBC nie jest w żadnym wypadku świetnym rozwiązaniem. Jest łatwy w użyciu dla programisty aplikacji, ale dość nieoptymalny pod względem wydajności, ponieważ serwer nadal musi wykonywać każdą instrukcję osobno — ale nie parsować i plan je indywidualnie, o ile korzystasz z przygotowanych wyciągów.
Jeśli autocommit jest włączone, wydajność będzie absolutnie żałosna, ponieważ każda instrukcja wyzwala zatwierdzenie. Nawet przy wyłączonym automatycznym zatwierdzaniu wiele małych instrukcji nie będzie szczególnie szybkie, nawet jeśli można wyeliminować opóźnienia w obie strony.
Lepsze rozwiązanie dla wielu prostych UPDATE
s może być:
COPY
nowe dane doTEMPORARY
lubUNLOGGED
stół; i- Użyj
UPDATE ... FROM
doUPDATE
zJOIN
na skopiowanej tabeli
W przypadku KOPII zobacz dokumentacja PgJDBC
i COPY
dokumentacja w dokumentacji serwera
.
Często zdarza się, że można coś zmienić, aby Twoja aplikacja nie musiała wysyłać tych wszystkich pojedynczych UPDATE
w ogóle.