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 :

Requête avec LEFT JOIN multiples un peu trop longue en exécution


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 109
    Par défaut Requête avec LEFT JOIN multiples un peu trop longue en exécution
    Bonjour,

    J'ai un souci de délai d'exécution pour une requête à multiples LEFT JOIN

    Contexte :
    - J'ai une table glossaire dont je veux faire la liste
    - Chaque élément de la table glossaire pour avoir une URL particulière ou pas (j'ai créé la table element_URL car le champ est rare)
    - Chaque élément de la table glossaire pour avoir un autre non ou pas (j'ai créé la table element_nom2 car le champ est rare)
    - Chaque élément de la table glossaire a un article (Dont le lien est décrit dans la table articles_elements) ou pas d'article

    Tout ceci fonctionne mais c'est un peu long : 8 secondes comparé à 0.8 secondes la seconde requête pour 630 éléments en test local.

    1ère requête : 8 s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT glossaire.Id, glossaire.Nom, CONCAT(element_url.URL,'?',element_url.URL_Parametres) as URL, element_nom2.Nom2 AS Nom2, articles_elements.Id  
    		FROM glossaire 
    		LEFT JOIN element_url ON (element_url.Element_Table_Id = 3 AND element_url.Element_Id = glossaire.Id) 
    		LEFT JOIN element_nom2 ON (element_nom2.Element_Table_Id = 3 AND element_nom2.Element_Id = glossaire.Id)  
       		LEFT JOIN articles_elements ON (articles_elements.Elements_Id = glossaire.Id AND articles_elements.Tables_Id = 3) 
    		GROUP BY glossaire.Nom
    		ORDER BY glossaire.Nom
    2ème requête : 0.8 s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT glossaire.Id, glossaire.Nom, CONCAT(element_url.URL,'?',element_url.URL_Parametres) as URL, element_nom2.Nom2 AS Nom2
    		FROM glossaire 
    		LEFT JOIN element_url ON (element_url.Element_Table_Id = 3 AND element_url.Element_Id = glossaire.Id) 
    		LEFT JOIN element_nom2 ON (element_nom2.Element_Table_Id = 3 AND element_nom2.Element_Id = glossaire.Id)  
    		ORDER BY glossaire.Nom


    Avez-vous une idée d'optimisation ?

    D'avance merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 622
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Difficicile de parler de performance sans savoir si vous avez mesuré des temps elapsed ou CPU, sans connaitre la volumétrie concernée, sans description des index etc...

    Cela étant, vous pouvez déjà supprimer le GROUP BY inutile de la première requête : un group by n'est requis que pour utiliser des fonctions d'aggrégation (SUM, AVG...)
    Ensuite vérifiez que dans la table articles_elements, les colonnes Elements_Id Tables_Id sont indexées
    Dans la négative, vérifiez le nombre de valeurs distinctes et la distribution des valeurs pour ces deux colonnes pour créer un index si pertinent

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 109
    Par défaut Oupssss
    Ouppssss en effet j'avais oublié d'indexer ces deux champs, le temps d'exécution est passé à 0.5 s.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête avec LEFT JOIN et ORDER BY très lente
    Par defacta dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/10/2016, 01h26
  2. [AC-2007] requête avec LEFT JOIN
    Par redoran dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 15/04/2014, 15h39
  3. Requête avec LEFT JOIN
    Par tom06440 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/03/2011, 11h02
  4. Requête avec NATURAL JOIN
    Par blids dans le forum SQL
    Réponses: 4
    Dernier message: 06/08/2004, 11h52
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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