Bonjour à tous,
Je suis actuellement en stage dans une équipe de DBA Etude.
Dans le cadre de mon stage, je suis amené à optimiser des requêtes.
L'équipe de dev nous a fournit une requête qui effectue une projection sur des champs d'une vue matérialisée. Cette requête contient juste une sélection (dans le sens restriction) sur un champ numérique.
Quand on fait le plan d'éxécution de la requête, l'optimiseur effectue un full table scan.
L'ensemble des valeurs est relativement bien réparti et la vue matérialisée est en refresh complete uniquement 1 seule fois dans la nuit.
Nous avons donc décidé de mettre un index sur la colonne de restriction.
Lancement du plan d'éxécution et nous obtenons toujours un full table scan même en pécisant des valeurs peu courante dans la restriction.
Nous avons crée une nouvelle vue matérialisée à partir de la vue existant. Puis création de l'index sur la nouvelle vue. Lancement du plan d'éxécution, l'optimiseur cette fois effectue un scan range index.
Je cherche à comprendre pour sur l'une des vue, l'optimiseur choisit de faire un full scan de la vue et sur la même vue, l'optim choisit de passer par l'index ?
En sachant que la base est sous oracle 10 et que les stats sont à jour.
Une idée ?
Merci beaucoup pour votre aide.
Partager