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

Langage SQL Discussion :

Optimisation de requête


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 5
    Par défaut Optimisation de requête
    Bonjour,

    Je cherche à améliorer une requête. Voici quelques explications.

    j'ai une table qui contient 3 colonnes :
    • id : clé primaire
    • pere : identifiant du père, peut être null
    • mère : identifiant de la mère, peut être null

    chaque ligne de la table indique pour une personne l'identifiant de son père et l'identifiant de sa mère. à partir de l'identifiant du père ou de la mère on peut retrouver les grands parents puisque il suffit de chercher dans la colonne id, l'identifiant du père et on obtient ainsi les grands parents.

    je cherche à optimiser ma requête car ma table contient pas loin de 1 million d'entrées. ma requête doit me ramener l'identifiant de la personne, celui de la mère, du père, des grand parents paternels (gpp et gmp) et des grand parents maternels (gpm et gmm). j'en suis sûre que la requête peut être amélioré mais je ne vois pas comment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.id, t1.mere as mere, t1.pere as pere, t2.mere as gmm, t2.pere as gpm, t3.mere as gmp, t3.pere as gpp
    FROM   table t1, table t2, table t3
    WHERE  t1.mere = t2.id
    AND    t1.pere = t3.id
    ORDER BY t1.id
    toute aide est la bienvenue
    merci par avance

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    A part le fait que votre écriture de SQL est obsolète depuis 1992 (les conditions de jointure doivent être dans la clause FROM et non dans la clause WHERE), je ne vois pas trop comment il serait possible de faire mieux...
    Peut-être n'avez vous pas besoin du tri ? Cela réduira certainement votre temps de traitement si vous supprimez la clause ORDER BY.

    Ensuite, avez-vous regardé votre plan d'exécution ? Avez-vous un index sur la colonne id ?

    Cordialement,

    Arkhena

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Idéalement pour cette requête il faut un index sur (id, pere, mere).

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 936
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    de quel SGBD parle t-on ? pour moi ça sent la requête récursive a plein nez mais peut être est-ce parce que j'ai le nez dedans en ce moment

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 5
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    de quel SGBD parle t-on ? pour moi ça sent la requête récursive a plein nez mais peut être est-ce parce que j'ai le nez dedans en ce moment
    DB2

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 936
    Billets dans le blog
    66
    Par défaut
    Bon, je ne connais pas DB2 (j'ai lâché IBM avant) mais un petit tour me confirme qu'il y a possibilité de récursivité requête récursive, ce lien mérite une lecture à mon avis
    quant aux jointures le cours de SQLPro est là pour ça

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 570
    Par défaut
    Bonjour,
    En complément de la réponse de Arkhena, la requête en contient aucune restriction, donc quoi qu'il en soit le moteur doit parcourir toute la table pour trouver les enregistrements qui vont bien.
    En effet (à priori) la seule façon de savoir si une ligne "pointe" vers un père et une mère est de lire cette ligne.
    Accessoirement, la requête telle qu'écrite ici ne renverra pas les lignes "sans parents".

    Tatayo.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Arkhena Voir le message
    A part le fait que votre écriture de SQL est obsolète depuis 1992 (les conditions de jointure doivent être dans la clause FROM et non dans la clause WHERE), je ne vois pas trop comment il serait possible de faire mieux...
    Peut-être n'avez vous pas besoin du tri ? Cela réduira certainement votre temps de traitement si vous supprimez la clause ORDER BY.

    Ensuite, avez-vous regardé votre plan d'exécution ? Avez-vous un index sur la colonne id ?
    je peux supprimer l'order by il n'est pas nécessaire. par contre une jointure dans le from ça me dit rien. pour précision je ne connais que le sql de base je suis ingé c++. le sql n'est pas trop ma spécialité.

    Citation Envoyé par Rei Ichido Voir le message
    Idéalement pour cette requête il faut un index sur (id, pere, mere).
    il y a un index uniquement sur id

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

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 09h50
  3. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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