Y a-t-il un moyen de forcer Oracle à utiliser un index sans utiliser de hints ?
Réponses
Trop de publicités?Oracle ne utilise pas un index lorsqu'il pense que l'index est
- désactivé
- invalide (par exemple, après un chargement massif de données et que les statistiques sur l'index n'ont pas été mises à jour)
- ne servira à rien (par exemple, lorsqu'il y a seulement deux valeurs différentes dans 5 millions de lignes)
Donc, la première chose à vérifier est que l'index est activé, puis exécutez la commande GATHER correcte sur votre index/table/schema. Lorsque cela ne fonctionne pas, Oracle pense que le chargement de votre index prendra en réalité plus de temps que le chargement des valeurs réelles des lignes. Dans ce cas, ajoutez plus de colonnes à l'index pour le rendre plus "diversifié".
Vous pourriez jeter un œil aux contours stockés d'Oracle. Vous pouvez prendre une requête existante et créer un contour stocké et ajuster la requête comme des indications. C'est juste très difficile à utiliser. Faites des recherches avant de décider de mettre en œuvre des contours stockés.
Vous pouvez ajouter des indications dans la requête qui la feront pencher en faveur d'un index plutôt que d'un autre.
En général, si vous avez collecté de bonnes statistiques sur toutes les tables et indexes, Oracle implémente généralement de très bons plans d'exécution.