Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 73
    Points : 20
    Points
    20

    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 :
    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 :
    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 du Club
    Homme Profil pro
    Développeur java, .Net
    Inscrit en
    janvier 2011
    Messages
    54
    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 : 54
    Points : 58
    Points
    58

    Par défaut

    Montres nous ta requête. Tu as quel index pour cette requête?

  3. #3
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro David Delbecq
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 771
    Détails du profil
    Informations personnelles :
    Nom : Homme David Delbecq
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 771
    Points : 41 242
    Points
    41 242

    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
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  4. #4
    Membre du Club
    Homme Profil pro Sébastien Barre
    Développeur Java
    Inscrit en
    mai 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien Barre
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : mai 2011
    Messages : 69
    Points : 54
    Points
    54

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •