Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > JDBC
JDBC Forum d'entraide sur l'API JDBC (Java Database Connectivity) et l'accès aux bases de données. Avant de poster -> FAQ JDBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/11/2012, 15h06   #1
nddvlp
Futur Membre du Club
 
Homme
Inscription : décembre 2011
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 70
Points : 19
Points : 19
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
nddvlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 15h41   #2
gandalf72000
Nouveau Membre du Club
 
Homme
Développeur Java
Inscription : janvier 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : janvier 2011
Messages : 34
Points : 30
Points : 30
Montres nous ta requête. Tu as quel index pour cette requête?
gandalf72000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2012, 01h06   #3
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 280
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

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

Informations forums :
Inscription : avril 2007
Messages : 18 280
Points : 32 756
Points : 32 756
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2012, 17h05   #4
sebabarre
Membre du Club
 
Homme Sébastien Barre
Développeur Java
Inscription : mai 2011
Messages : 66
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 : 66
Points : 52
Points : 52
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.
sebabarre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h42.


 
 
 
 
Partenaires

Hébergement Web