Question

J'ai lu que le CBO d'Oracle (sur les versions récentes) est si bon que même si le pire ordre de jointure possible est donné, le CBO prend automatiquement le meilleur ordre de jointure.Alors, des indices comme ORDERED seront-ils utiles sur les versions récentes (10,11) ?.Est-il possible que le CBO manque un ordre d’adhésion optimal ?Merci.

Était-ce utile?

La solution

Mon expérience personnelle est qu'avec Oracle 10g/11g, vous pouvez difficilement améliorer une requête avec des astuces.Le plus souvent, ils s’avèrent moins performants que vous. pense est optimale.Le CBO s’est vraiment considérablement amélioré.

Il existe encore quelques limitations (très lointaines) aux fonctionnalités de transformation de requêtes, en particulier avec des requêtes plutôt complexes. OUTER JOIN constructions, car en interne, la syntaxe ANSI est toujours mappée à certaines constructions Oracle archaïques impliquant le (+) opérateur.En dehors de cela et d’autres cas très éloignés, je ne pense plus que des indices soient nécessaires.

Vous pouvez bien mieux régler en réécrivant du SQL ou en ajoutant des contraintes/index.Bien sûr, ces choses ne sont vraies que si vos statistiques et histogrammes sont corrects, à jour et raisonnables, comme l'a correctement commenté Skaffman.

Autres conseils

Les résultats ORACLE CBO dépendent de tant de paramètres que je peux difficilement prédire le plan résultant dans le système réel.En règle générale, je suggère que vous n'utilisez pas d'astuces, si vous n'êtes pas sûr que vous DOIT les utiliser.

En ce qui concerne ORDERED indique de mon expérience, il vous suffit de dire à Oracle l'ordre exact de jointures.

Quoi qu'il en soit, la meilleure façon de savoir - est de faire des expériences vous-même, essayez et choisissez la meilleure solution :)

Je vous suggère de lire l'Oracle effectif de Tom Kyte par design - Il y a un très bon chapitre sur l'optimisation de la requête et comment fonctionne la CBO.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top