|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
* Bonjour, *
J'ai la vue suivante : Code :
Logique, puisque c'est ça que j'utilise pour faire la jointure avec la table EVE... Seulement, lorsque j'exécute la requête suivante : Code :
Du coup, cette requête déjà particulièrement barbare dure plus de 30 minutes... Alors je désirerais qu'il utilise au moins les bons index, même si c'est loin d'être à cet endroit qu'il passe le plus de temps, ce serait toujours ça de pris... * Merci * |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
J'ai un doute sur l'hint placé directement dans la vue, c'est pas impossible du tout qu'Oracle l'ignore totalement.
Est-ce que l'index est utilisé avec cette syntaxe ? Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Hmpf
C'est mort, la requête est générée par un ERP, je ne peux pas aller mettre un HINT dans la requête, je n'ai accès qu'à la vue... Vivement qu'on change de version, on aura une version plus récente d'Oracle, avec peut-être moins de bugs dans l'optimiseur... Parce que là, le coup du TIE_IDX6, faudra m'expliquer quelques années avant que je comprenne... |
|
|
00
|
|
|
#5 | |||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Parce que là, sur les 10 index présents sur TIE, il a clairement choisi LE SEUL qui n'a aucune chance d'être intéressant. En effet, je n'utilise pas P_TIEINTGR dans la vue. Alors que l'ensemble des autres indexes portent sur un plus grand nombre de champs utilisés dans la vue. A noter que le IDX1, qui est la clé, est de toute façon mon critère de jointure : Code :
- UNIQUE - Organisés en cluster - Immuables Les stats pour de l'ensemble des index sont recalculées en même temps. Il n'y a donc aucune chance qu'un autre index soit plus pertinent... A part si Oracle utilise Random() pour choisir... |
|||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Quel est l'intérêt d'avoir 2 fois :
Code :
Code :
max(cde.datliv) over (partition BY cde.codsoc,cde.achvte,cde.typeve,cde.numeve) AS max_datliv |
||
|
|
00
|
|
|
#7 | |||||||
![]() ![]() |
Citation:
Si vous êtes en 10g+, le CBO est excellent : les requêtes à aiguiller avec un HINT sont rares. Ce n'est pas parce que vous avez un index qu'il va être utilisé, un exemple simple : Code :
Une première requête : Code :
Avec une autre valeur : Code :
__________________
Email : http://scr.im/waldar |
|||||||
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut,
Citation:
Citation:
Et ça, ça peut s'expliquer de plein de manières. Il faut regarder le plan et les cardinalités qu'il estime, les comparer à ce qu'il y a en vrai, comprendre pourquoi il y a un écart...
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||
|
10
|
|
|
#9 | |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Aucun, c'est juste que le format de la vue est imposé par l'ERP, et qu'il a besoin d'avoir cette information dans deux champs différents.
Eventuellement, un sous-select global aurait permi d'utiliser un unique sous-select, et reprendre le même résultat dans deux alias. Ceci dit, je pense que quand Oracle voit deux fois le même sous-select, il ne l'exécute qu'une seule fois (j'espère pour lui tout du moins) Citation:
=> J'avais tenté de faire une jointure dans le FROM et un group by, mais je me suis heurté à d'autres problèmes qui m'ont obligés à utiliser une sous-requête. |
|
|
|
00
|
|
|
#10 | |||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Aussi, si je simplifie la requête (par exemple) : Code :
Je ne vois absolument pas, dans la vue, ce qui peut le pousser à tenter d'utiliser un autre index, surtout sur index qui porte sur des champs absents de la requête ! Enfin bon, de toute façon, le problème est clos, dans la mesure où je n'ai pas de moyen pour le forcer à utiliser un autre index (et que, comme je l'espère, on va migrer d'ici quelques mois, et donc laisser tomber le serveur actuel qui me semble particulièrement étrangement configuré -jamais vu des requêtes aussi lentes qu'ici, ni de plans d'exécution aussi tordus-) |
|||
|
|
00
|
|
|
#11 |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Il peut y avoir plusieurs raisons qui font en sorte que l'index ne soit pas utilisé malgré l'avoir mis explicitement dans le hint. Au lieu de m'étaler la dessus, je vous invite à lire le lien suivant (ainsi que tous les liens qui y sont référencés)
http://hoopercharles.wordpress.com/2...an-index-hint/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com