Bonjour,
J'ai une requête SQL assez simple qui utilise une jointure entre deux tables.
Select * from table1, table2 where table1.colonne1 = table2.colonne1 and table2.colonne2 = ?
colonne1 est la clef primaire de table1 (pk)
colonne1 et colonne2 sont indexées dans table2 (idx1, idx2)
Quand je regarde le schéma d'exécution de cette requête à l'aide de la console "Enterprise Manager 10G", dans la rubrique "Instance de base de données > Taux d'activité les plus élevés", je vois que le comportement d'Oracle dépend de la requête. En sélectionnant différentes "valeur de hachage de plan" de la liste déroulante, je vois que
parfois, il passe par pk et idx2
parfois, il passe seulement par idx2
parfois, il n'utilise aucun index, il fait un fiull scan sur chacune des tables
Je ne comprends pas pourquoi je ne trouve pas tout le temps le même schéma d'exécution avec pk et idx2, d'autant qu'il m'affiche dans les 2 derniers cas des temps d'exécution de 3 et de 4 secondes.
J'aurais deux questions
1)
Est ce que le schéma d'exécution d'une requête dépend du schéma de la base de données (table + index) ou est ce qu'il peut dépendre de la valeur que je donne à "table2.colonne2 = ?" dans ma requête ?
2)
Est ce que le schéma d'exécution de la console corerspond à ce qui s'est réellement passé sur le serveur à un instant donné, ou est ce que Oracle stocke simplement la requête et au moment où j'utilise la console, il simule ce qui a dû se passer ?
Merci de votre aide.
Partager