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 ?

Que dois-je faire s’il y a trop de données dans la requête SQL et si la mémoire déborde ?

(*-*)浩
(*-*)浩original
2019-10-28 09:53:497067parcourir

Normalement, cette situation ne se produira pas, mais il n'y a aucune garantie. Cette situation se produira occasionnellement. La solution est la suivante :

Que dois-je faire s’il y a trop de données dans la requête SQL et si la mémoire déborde ?

. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn