bonjour,

Je dois recuperer des données d'une table assez grande qui peut contenir quelques millions d'enregistrements (la table contient actuellement environ 250.000).

Pour améliorer les performances de cette récuperation, j'ai rajouté les champs figurant dans le where comme indexes et j'ai procédé à une récupération par bloc

Je récupére environ 20.000 enregistrements à chaque requête.

Chaque requete prend environ 10s en moyenne, je dois absolument arriver à améliorer ça !!! Car si je dois récupérer 1.000.000 d'enregistrements cela prend pas mal de temps comme meme, car je recupere à chaque fois que 20.000 enregistrements, imaginez 10s* 1.000.000/20.000, si je me suis pas trompé ds mon calcul ca fait presque 500ms !!!! ce qui énorme je pense.

Ce qui le faut savoir par rapport à mon environement :

Environement de dev normal avec 2GO en mémoire super utilisé par plein de programmes.

J'utilise mysql, oui je suis daccord que c'est pas le meilleur choix pour les "grosses bases" mais c'est soit lui soit postgres, a priori postgres est meilleur en perf mais j'ai pas trouvé de benchmarks exacte qui parle de ça.

Le programme est lancé depuis Eclipse et c'est executé dans le coontexte d'une application web JSF

et enfin voila ma requete
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
request = from XXXX where  (clientid= 'XXX' or clientid = 'YYY' or clientid = 'ZZZ') order by clientid,timecreation DESC  
Query query = session.createQuery(request);
query.setFirstResult(firstIndex);
query.setMaxResults(maxResult);
List<XObjet> tmp = query.list();
voila je pense que vous avez tout

Pourriez vous m'aider à améliorer cela,

Merci pour vos retours