IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Parcourir resultset en un minimum de temps


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 94
    Points : 53
    Points
    53
    Par défaut Parcourir resultset en un minimum de temps
    Bonjour à tous,

    j'effectue une requête SQL qui me retourne un résultat contenant environ 50 000 lignes que je désire afficher dans une jtable.

    J'obtiens des temps d'environs 65 sec pour effectuer celà.
    Je trouve ce temps élevé et aimerai optimiser mon code.

    L'étape consommant le plus de temps (environ 60 sec) est la suivante :
    dans le Model associé à ma JTable, je stocke les données de mon ResultSet dans un ArrayList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Resultset resultat;
     
    do
    {
     
    }
    while(resultat.next());
    En ne faisant aucun traitement dans ma boucle (uniquement next()), cette étape me prend environ 60sec.
    J'ai essayé de paramétrer le nombre de lignes à récupérer en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    resultat.getStatement().setMaxRows(100000);
    resultat.setFetchSize(5000);
    mais celà n'a pas changé grand chose.
    Je ferme correctement mes ResultSet, Statement, Connexion.
    J'utilise également un PreparedStatement.

    Quelqu'un aurait-il une idée pour améliorer les performances?

    Merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur java, .Net
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur java, .Net

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Points : 71
    Points
    71
    Par défaut
    Montres nous ta requête. Tu as quel index pour cette requête?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Chaque appel à next va créer des objets correspondants à la ligne. Si on suppose que tu n'as que 10 colonnes de type String, t'es quand même gentillement occupé de demander à java de créer et détruire 500.000 Objets. Il ne faut par regarder que le nombre de lignes mais aussi la mémoire que ça occupe.

    Vu que, en général hein, on ne sais pas afficher plus de 80 lignes à la fois à l'écran, on se demande l'intérêt de pomper 50.000 lignes d'un coup plutot que 100 lignes à la fois

    Maintenant, certes, 60 secondes c'est beaucoup, et il faudrait aussi regarder quelle quantité ça occupe sur la couche réseau. Si chaue ligne occupe 10Ko de données (avec des varchar tout plein ça chiffre vite), t'es quand même occupé de faitre transiter 500M sur le réseau

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par nddvlp Voir le message
    Bonjour à tous,

    j'effectue une requête SQL qui me retourne un résultat contenant environ 50 000 lignes que je désire afficher dans une jtable.
    Si c'est pour afficher dans une JTable, autant faire un "page à page", et récupérer tes objets par paquets de 100 à chaque changement de page.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/06/2013, 17h15
  2. Réponses: 4
    Dernier message: 17/10/2010, 16h27
  3. Nombreuses requete à faire en minimum de temps
    Par x2thez dans le forum Langage SQL
    Réponses: 16
    Dernier message: 14/01/2008, 16h02
  4. [JDBC]Plusieurs ResultSet en même temps ?
    Par Baptiste Wicht dans le forum JDBC
    Réponses: 4
    Dernier message: 19/05/2006, 11h42
  5. [ResultSet] temps de traitement
    Par woods dans le forum JDBC
    Réponses: 10
    Dernier message: 26/01/2006, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo