Maison > Article > base de données > Que dois-je faire s’il y a trop de données dans la requête SQL et si la mémoire déborde ?
Normalement, cette situation ne se produira pas, mais il n'y a aucune garantie. Cette situation se produira occasionnellement. La solution est la suivante :
. Utilisez des instructions de requête de pagination. (Apprentissage recommandé : apprentissage mysql )
Étant donné que la requête de pagination n'interroge qu'une petite quantité de données à chaque fois, elle ne prend pas trop de mémoire, et la quantité Les données sont volumineuses. Parfois, les requêtes de pagination permettent de gagner du temps.
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(); }
Ajouter la configuration des paramètres d'URL
Ajoutez deux paramètres à l'URL jdbc et tout ira bien, résolvant avec succès le problème de débordement de mémoire.
"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";
( Expliquez Fetch, lorsque nous exécutons une instruction de requête SQL, nous devons ouvrir un curseur à la fois sur le client et sur le serveur, et demander respectivement un espace mémoire pour stocker les données de la requête . Un tampon. Le nombre de données stockées dans cette zone mémoire est déterminé par fetchsize. En même temps, chaque paquet réseau transmettra les enregistrements fetchsize au client)
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!