Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2006, 14h10   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 110
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2006
Messages : 110
Points : 31
Points : 31
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 :
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 :
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 :
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.
Ralfman68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 17h58   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 22h25   #3
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
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).
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2006, 01h02   #4
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 110
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2006
Messages : 110
Points : 31
Points : 31
Ah super, merci messieurs pour ces précisions
Ralfman68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h23.


 
 
 
 
Partenaires

Hébergement Web