|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Bonjour
J'ai une requête toute simple. Code :
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 ? |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
le plus simple c'est peut-être de mettre un hint.
Changer le paramètre qui influe sur toute la base uniquement pour cette requête ça me parait un peu exagéré... sinon essaye ceci : Code :
SELECT ID FROM MATABLE WHERE ID > (xxx + 0) AND MACOL = (yyy || '') |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Non, non on ne s'est pas bien compris
Je suis en CURSOR_SHARING = FORCE ou SIMILAR suivant les versions Et je veux mettre le Hint CURSOR_SHARING_EXACT juste pour cette requete et surtout ne pas changer mon paramétrage de base. Sinon je comprends pas bien ta solution. En faisant ce que tu me dis je ne vais pouvoir utiliser AUCUN index Moi, je veux en utiliser un dans un cas et autre dans l'autre |
|
|
00
|
|
|
#4 | ||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#5 | |
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Citation:
Nicolas. |
|
|
00
|
|
|
#6 | ||
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Citation:
J'avais lu trop vite. Ca me plait bien. Je test cela et je vous dis si ca marche.Citation:
|
||
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
YESSS !! Ca marche, je passe de 48,293.0 read par exec à 1,552.5 voila une petite optimisation qui me plait Merci et
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com