Bonjour
J'ai une requête toute simple.
ID est la PK de cette table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT ID FROM MATABLE WHERE ID > xxx AND MACOL = yyy
Dans la plus part des cas, xxx est très prêt de la valeur max de la PK mais dans certain cas il vaut 0 et dans ce cas yyy correspond à une valeur qui n'existe pas dans MACOL (qui est indéxée).
Tout cela pour dire que dans un cas le plan optimal passe par la PK et dans l'autre par l'index sur MACOL. Or comme xxx et yyy sont des binds variables Oracle ne calcule le plan d'exécution qu'une seule fois. Et donc il se plante régulièrement.
Ma question est comment faire pour forcer Oracle a recalculer le plan a chaque exécution de la requête (Je suis en 8i, mais je suis aussi intéressé par des solutions dans les versions supérieures).
La seule solution que j'ai trouvé mais je trouve cela assez lourd. C'est de faire un REF_CURSOR pour passer en "dur" (par concaténation) xxx et yyy et utiliser le HINT CURSOR_SHARING_EXACT.
Je trouve tout ca un peu lourd.... Vous avez d'autres idées ?
Partager