Accelerer les requetes

Résolu
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 3 sept. 2007 à 23:58
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 5 sept. 2007 à 22:29
Bonjour,
J'ai une petite question à vous poser : j'ai un logiciel java avec des requetes assez lourdes qui ralentissent fortement mon application (20 s pour l'affichage d'une page, alors que la requête n'est même pas tellement lourde.... :(  ! ).
Quelles solutions pourrais-je utiliser pour accélerer un peu tout ca ?
(j'ai bien vu que je pouvais utiliser les threads, mais comment faire pour séparer la requete et le graphisme?)
Merci pour votre aide !

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
5 sept. 2007 à 21:20
Salut,

Ou là là !!! Tu fais bien plus qu'une requête là !

Utilise des relations plutôt que d'utiliser l'opérateur IN qui est très lent !

A voir si tu obtiens le même résultat, mais ta requête doit ressembler au final à un truc du genre :
select info_extra_cartellini.cell_id, count(info_extra_cartellini.cell_id)
from info_extra_cartellini, cartellini, intercettazioni
where info_extra_cartellini.idcartellino = cartellini.idcartellino AND
intercettazioni.intercettazione = cartellini.intercettazione AND
intercettazioni.descrizione = '" +
AccueilGeneral.tabDecoupe[4].toString() + "')

Non seulement c'est plus simple à lire, mais surtout, mysql ne fait qu'une seulte requête et peut l'optimiser !

Car ta requêtes initiale devait faire 4 requêtes, avec une liaison incrémentale pour chaque tuples !
______________________________________
DarK Sidious
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
4 sept. 2007 à 06:40
Salut,

Ben déjà donne nous le code de ta requêtes et dis nous combien d'enregistrement elle retourne...

Ensuite montre nous le code qui utilise cette requête.

As-tu fait des index dans ta base sur les champs de recherche ? Ca peut te faire gagner de précieuse secondes rien que cà !
______________________________________
DarK Sidious
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
4 sept. 2007 à 12:59
Des ce soir, je donnerais le code de ma requete...
Pour l'utilisation, je recupere les entregistrements de ma requete que je redistribue dans un tableau pour les afficher ensuite dans un JTree. Les détails arriveront avec le code.
Par contre pour ce qui est de la base de données, je n'ai malheureusement pas la possibilité de la transformer... vive la sous-traitance :(
Merci pour ton aide DarkSidious, j'enverris le code en rentrant

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
5 sept. 2007 à 20:47
Alors comme promis mais avec un peu de retard, voilà mon code concernant ma requête :

public String[][] CellPlusDemandes(){
        String[][] tabCellDemandes=null;
        Statement pst = null;
        try {
            this.init();
            pst = this.getMyConnection().createStatement();
           
        } catch (SQLException e) {
           
            e.printStackTrace();
        }

        ResultSet rsInfos = null;
   

        try {            rsInfos pst.executeQuery("select cell_id,count(cell_id) from info_extra_cartellini where idcartellino in(select idcartellino from cartellini where intercettazione in(select intercettazione from intercettazioni where decreto in(select decreto from intercettazioni where descrizione '" + AccueilGeneral.tabDecoupe[4].toString() + "'))) group by cell_id order by count(cell_id) DESC");
        } catch (SQLException e1) {
       
            e1.printStackTrace();
        }
        try {
            int i = 0;
            rsInfos.last();
            int num = rsInfos.getRow();
            tabCellDemandes= new String[num][2];
            rsInfos.first();
            while(rsInfos.next()){
                tabCellDemandes[i][0] = rsInfos.getString(1);
                tabCellDemandes[i][1] = rsInfos.getString(2);
                i = i + 1;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.destroy();
        return tabCellDemandes;
    }

et voici la maniere dont je traite par la suite :

public void remplirTable(String[][] tabNum){
       
        String[] tabEnTete = {"Cellule","total d'appel"};
        tableCellules = new JTable(tabNum,tabEnTete);
        scroll = new JScrollPane(tableCellules);
        scroll.setVisible(true);
    }

Voilà, j'espere que vous pourrez me donner un conseil!

Merci d'avance

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
5 sept. 2007 à 22:03
Merci Beaucoup DarkSidious.
Ta requete est en effet bien plus rapide... J'ai du oublier mes cours de SQL :(!!!
PAr contre, je ne comprends pas pourquoi je gagne 25 secondes sur MySQL et seulement une à deux secondes sur JAVA?

Je vais me pencher la-dessus en esperant que tu pourra m'eclairer sur ce point aussi.

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
5 sept. 2007 à 22:29
Autant pour moi DarkSidious, je me suis trompé de methode pour remplacer la requete :D !
Il est temps que je dorme....
Encore merci pour ton aide ;)

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
0
Rejoignez-nous