Accelerer les requetes [Résolu]

tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 3 sept. 2007 à 23:58 - Dernière réponse : tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention
- 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 
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 5 sept. 2007 à 21:20
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 4 sept. 2007 à 06:40
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 4 sept. 2007 à 12:59
0
Merci
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 
Commenter la réponse de tof008
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 5 sept. 2007 à 20:47
0
Merci
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 
Commenter la réponse de tof008
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 5 sept. 2007 à 22:03
0
Merci
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 
Commenter la réponse de tof008
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 5 sept. 2007 à 22:29
0
Merci
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 
Commenter la réponse de tof008

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.