J'ai constaté récemment que la valeur du paramètre OPTIMIZER_INDEX_COST_ADJ influait considérablement sur le plan d'exécution et le coût d'une requête, et que la valeur par défaut fixée par Oracle était loin d'être optimale.
En effet, par défaut cette valeur est à 100.
Si je demande le plan d'exécution d'une requête comportant un certain nombre de jointures, j'obtiens un coût de 1763 avec 5 TABLE ACCESS FULL.
En passant le paramètre à 10, j'obtiens 1364 et seulement 2 TABLE ACCESS FULL.
Enfin, en mettant le paramètre au minimum, soit 1, j'obtiens un coût de 218 avec un seul TABLE ACCESS FULL.
Cela paraît logique vu que plus la valeur du paramètre est faible, plus le choix des index est privilégié. Mais dans ce cas, pourquoi fixer la valeur par défaut à 100 ?![]()
:
Dans la requête que j'ai prise en exemple, l'évolution du plan d'exécution est flagrante. Mais pour certaines autres requêtes, le plan d'exécution reste rigoureusement identique entre les valeurs 100 et 1, alors que le coût de la requête diminue considérablementComment est défini ce coût exactement s'il ne se base pas uniquement sur le plan d'exécution ?
Merci de vos réponses.
Partager