Jeśli włączysz MySQL Opcja JDBC
useCursorFetch
, fetchSize będzie rzeczywiście respektowany przez kierowcę.
Jest jednak jedna wada tego podejścia:będzie używało kursorów po stronie serwera, które w MySQL są zaimplementowane przy użyciu tabel tymczasowych. Oznacza to, że wyniki nie pojawią się, dopóki zapytanie nie zostanie zakończone na serwerze, a dodatkowa pamięć zostanie wykorzystana po stronie serwera.
Jeśli chcesz po prostu użyć strumieniowego przesyłania wyników i nie zależy Ci na dokładnym rozmiarze pobierania, obciążenie setFetchSize(Integer.MIN_VALUE)
nie jest tak zły, jak mogą sugerować doktorzy. W rzeczywistości po prostu wyłącza buforowanie po stronie klienta całej odpowiedzi i daje odpowiedzi, gdy nadejdą; nie jest wymagana podróż w obie strony na wiersz.