Normalerweise wird diese Situation nicht auftreten, es gibt jedoch keine Garantie, dass diese Situation gelegentlich auftreten wird:
Verwenden Sie Paging-Abfrageanweisungen. (Empfohlenes Lernen: MySQL-Lernen )
Da die Paging-Abfrage jedes Mal nur eine kleine Datenmenge abfragt, beansprucht sie nicht zu viel Speicher und die Menge Die Datenmenge ist groß. Manchmal sparen Paging-Abfragen etwas Zeit.
String sql = " SELECT uid,uname FROM t_user LIMIT ?,? " ; PreparedStatement ps = con.prepareStatement(sql) ; int pageSize = 10000; int pageId = 0; do { pst.setInt(1, pageId * pageSize); pst.setInt(2, pageSize); ResultSet rs = pst.executeQuery(); boolean isEmpty = true; while (rs.next()) { isEmpty = false; id = rs.getInt(1); name = rs.getString(2); } if (isEmpty) { break; } pageId++; } while (true); con.close(); } catch (SQLException e) { e.printStackTrace(); }
URL-Parameterkonfiguration hinzufügen
Fügen Sie zwei Parameter zur JDBC-URL hinzu, dann ist alles in Ordnung und das Speicherüberlaufproblem wird erfolgreich gelöst.
"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";
( Erklären Sie Fetch: Wenn wir eine SQL-Abfrageanweisung ausführen, müssen wir einen Cursor sowohl auf dem Client als auch auf dem Server öffnen und jeweils einen Speicherplatz zum Speichern der Abfragedaten beantragen . Ein Puffer. Die Anzahl der in diesem Speicherbereich gespeicherten Daten wird durch fetchsize bestimmt. Gleichzeitig werden fetchsize-Datensätze an den Client übertragen
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn die SQL-Abfrage zu viele Daten enthält und der Speicher überläuft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!