Wenn Sie den MySQL JDBC-Option
useCursorFetch
, fetchSize wird tatsächlich vom Treiber respektiert.
Dieser Ansatz hat jedoch einen Nachteil:Er verwendet serverseitige Cursor, die in MySQL mithilfe von temporären Tabellen implementiert werden. Dies bedeutet, dass die Ergebnisse erst eintreffen, wenn die Abfrage auf dem Server abgeschlossen ist, und dass zusätzlicher Speicher serverseitig verwendet wird.
Wenn Sie nur Ergebnisstreaming verwenden möchten und sich nicht um die genaue Abrufgröße kümmern, wird der Overhead von setFetchSize(Integer.MIN_VALUE)
ist nicht so schlimm, wie die Dokumente vermuten lassen. Es deaktiviert tatsächlich nur das clientseitige Caching der gesamten Antwort und gibt Ihnen Antworten, sobald sie eintreffen. es ist kein Hin- und Rückweg pro Zeile erforderlich.