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

Oracle Discussion :

Détailler un explain


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 62
    Points
    62
    Par défaut Détailler un explain
    Bonjour.

    J'ai un problème avec solution corrigée que je n'arrive pas comprendre.
    Soit la requête suivante avec oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    EXPLAIN PLAN 
        SET statement_id = 'eds0'
        FOR select NomTGV
      from TGV, Arret
     where TGV.NumTGV = Arret.NumTGV
       and GareTerm = 'Aix';
    voilà le plan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0 SELECT STATEMENT
      1 MERGE JOIN
        2 SORT JOIN
          3 TABLE ACCESS FULL ARRET
        4 SORT JOIN
          5 TABLE ACCESS FULL TGV
    et le détail des opérations correspondant donné en solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     1)On parcourt séquentiellement la table TGV et on sélectionne les TGV dont le terminus est Aix, on projète sur le numéro de TGV et le nom. On trie sur le numéro de TGV.
    2) On lit la table Arret, on la projète sur le numéro de TGV et on trie sur le numéro de TGV. On fusionne les deux tables triées et on projète sur le nom de TGV
    Ce que je ne comprends pas est pourquoi est-ce que le parcours de la table TGV est effectué en premier, alors que dans le plan explain c'est la dernière ligne.

    Pouvez vous me confirmer que l'ordre a une importance, et , si possible, pourquoi , merci de votre patience et bonnes fêtes de fin d'année.

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Dans un plan d'exécution affiché par EXPLAIN PLAN c'est d'abord les étapes de plus grande profondeur qui sont exécutées puis on remonte en prenant les étapes qui ont une profondeur moindre. Ce n'est donc pas le numéro d'ordre de l'étape qui donne l'ordre d'exécution.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Et de toute façons comme c'est un merge-join, le sens n'a aucune importance, car il y a un tri des 2 ensembles dans un premier temps (les 2 sort full) puis une imbrications de ces 2 listes triées (le merge).

    Si la clause GareTerm = 'Aix' est tres discriminante (je suppose que la colonne fait partie de la table "Arret" ?) , alors il faut:
    - mettre un index sur la colonne GareTerm
    - mettre un index sur la colonne TGV.NumTGV

    à ce moment là le plan devrait etre une boucle imbriquée (NESTED LOOP).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 62
    Points
    62
    Par défaut
    Ah super, merci messieurs pour ces précisions

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

Discussions similaires

  1. TKPROF et Explain Plan
    Par kamalito dans le forum Oracle
    Réponses: 7
    Dernier message: 27/10/2005, 11h54
  2. [MYSQL]Erreur EXPLAIN (UPDATE...)
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 10
    Dernier message: 13/10/2005, 11h30
  3. Réponses: 13
    Dernier message: 23/06/2005, 10h56
  4. [PEAR][DB] Pourquoi lance-t-il des EXPLAIN ?
    Par Alexandre T dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 19/10/2004, 09h44
  5. explain SQL constant scan
    Par drizzt2511 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/08/2004, 10h41

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