IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

problème de lenteur requete


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut problème de lenteur requete
    Bonjour,

    Voilà mon petit problème...
    j'ai un énorme problème de lenteur sur une requete.
    Je pensais simplement à un problème de lenteur d'affichage dans ma page web, mais meme quand je lance la requete directement dans mysql la requete est tres tres longue.

    Avez vous des pistes ?
    Quels logiciels pour tracer une requete ??

    merci d'avance de votre aide.

    Ci - joint la fameuse requete en question


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    SELECT DISTINCT (
    demande.id_demande
    ), demande.date_demande, demande.id_demandeur, demande.valideur_1, personnel.titre_util, personnel.nom_util, personnel.prenom_util, info_organisation.d_depart, info_organisation.h_depart, info_organisation.d_retour, info_organisation.h_retour, but_deplacement.libelle_deplacement, demande.statut_demande, secteur.nom_secteur, demande.date_solde, unite_fonctionnelle.nom_uf, info_mode_deplacement.frais_personnel, demande.valideur_2
    FROM gestiondesdemandes.personnel, autorisationsortie.demande, autorisationsortie.info_organisation, autorisationsortie.but_deplacement, gestiondesdemandes.secteur, autorisationsortie.personnel_concerne, autorisationsortie.info_mode_deplacement, gestiondesdemandes.unite_fonctionnelle, autorisationsortie.personnel_autorisation
    WHERE demande.id_demandeur = personnel.id_util
    AND but_deplacement.id_deplacement = info_organisation.but_deplacement
    AND secteur.id_secteur = personnel.code_secteur
    AND personnel_concerne.id_demande = demande.id_demande
    AND info_organisation.id_demande = demande.id_demande
    AND unite_fonctionnelle.id_uf = personnel.code_uf
    AND demande.id_demande = info_mode_deplacement.id_demande
    AND (
    demande.statut_demande = '0'
    OR demande.statut_demande =1
    OR demande.statut_demande =3
    OR demande.statut_demande =9
    )
    ORDER BY demande.date_demande DESC

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 129
    Points : 97
    Points
    97
    Par défaut
    Qu'elle version de mysql utilises tu ?

    Pour t'aider à optimiser ta requête tu peu utiliser la commande EXPLAIN

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 130
    Points
    53 130
    Billets dans le blog
    6
    Par défaut
    1) DISTINCT n'est pas une fonction. C'est un opérateur de ligne.
    2) utilisez des JOIN et non pas un bouliboulga dans la clause WHERE
    3) utilisez des alias de table

    En faisant ceci votre erreur vous sauterais immédiatement aux yeux... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    SELECT DISTINCT AD.id_demande, 
                    AD.date_demande, 
                    AD.id_demandeur, 
                    AD.valideur_1, 
                    GP.titre_util, 
                    GP.nom_util, 
                    GP.prenom_util, 
                    AIO.d_depart, 
                    AIO.h_depart, 
                    AIO.d_retour, 
                    AIO.h_retour, 
                    ABD.libelle_deplacement, 
                    AD.statut_demande, 
                    GS.nom_secteur, 
                    AD.date_solde, 
                    GUF.nom_uf, 
                    AIMD.frais_personnel, 
                    AD.valideur_2
     
     
     
    FROM gestiondesdemandes.personnel AS GP 
         INNER JOIN autorisationsortie.demande AS AD
               ON AD.id_demandeur = GP.id_util
         INNER JOIN autorisationsortie.info_organisation AS AIO
               ON AIO.id_demande = AD.id_demande 
         INNER JOIN autorisationsortie.but_deplacement AS ABD
               ON ABD.id_deplacement = AIO.but_deplacement
         INNER JOIN gestiondesdemandes.secteur AS GS
               ON GS.id_secteur = GP.code_secteur
         INNER JOIN autorisationsortie.personnel_concerne AS APC
               ON APC.id_demande = AD.id_demande      
         INNER JOIN autorisationsortie.info_mode_deplacement AS AIMD
               ON  AD.id_demande = AIMD.id_demande     
         INNER JOIN gestiondesdemandes.unite_fonctionnelle AS GUF 
               ON GUF.id_uf = GP.code_uf     
         INNER JOIN autorisationsortie.personnel_autorisation AS APA
               ON ???
     
     
    WHERE AD.statut_demande = '0'
       OR AD.statut_demande =1
       OR AD.statut_demande =3
       OR AD.statut_demande =9
     
    ORDER BY demande.date_demande DESC
    Regardez : il n'y a pas de jointure entre votre table autorisationsortie.personnel_autorisation et l'une quelconque des autres tables.

    Vous faites donc un produit cartésien.

    Apprenez donc à faire de jointure avec des JOIN et non dans la clause WHERE !
    Lisez ce que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...ointures/#L1.2
    Paragraphe : UN CONSEIL IMPORTANT !

    A +

Discussions similaires

  1. Problème de lenteur de Requete DB2
    Par nikoseag dans le forum DB2
    Réponses: 5
    Dernier message: 29/08/2011, 09h19
  2. Problème de lenteur des requetes
    Par cyberdam dans le forum Installation
    Réponses: 1
    Dernier message: 20/03/2007, 11h25
  3. [Update] Problème ds ma requete
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2005, 11h28
  4. Problème de sous-requete.
    Par Oberown dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2004, 16h44
  5. Optimiser MS SQL2000 car j'ai des problèmes de lenteurs
    Par djavaux dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/04/2004, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo