Bonsoir à tous,
Je suis confronté à un problème d'optimisation de requête SQL, celle-ci prenant beaucoup trop de temps à l’exécution. Voici la requête :
Les deux tables incriminées, CSSOR et DCONTA sont indexées sur les trois colonnes que je requête dans la clause WHERE (un index de créé sur chacune des deux tables).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DCO_NUMCSS, DCO_CODPRV, DCO_NUMFAC, DCO_ENVOI, DCO_DATENV, DCO_PRILIV, DCO_CODECE, DCO_IMMAT, DCO_DATPRL, DCO_DATIMT, DCO_NUMSER FROM DCONTA WHERE DCO_NUMCSS||DCO_NUMSER||DCO_NUMFAC NOT IN ( SELECT CSO_NUMCSS||CSO_NUMSER||CSO_NUMFAC FROM CSSOR );
Lorsque je demande à ORacle de me fournir le plan d'execution de la requete (Explain Plan), celui-ci ne retourne deux TABLE ACCESS FULL. Je souhaiterais qu'il utilise mes index car je pense que le traitements de la requête irait largement plus vite...? Je ne suis pas doué en tuning / optimisation de requête, donc merci d'avance pour votre indulgence. J'ai pourtant lu par mal de cours mais j'ai surement dû passer à coté de quelques chose, et je ne comprends pas pourquoi.
Est-ce à cause de la concaténation ? Pourtant lorsque je ne prend qu'un seul champ, lui aussi indexé (j'ai testé la création d'index simples et supprimé ceux sur trois colonnes pour le tests) et le résultat est le même, Oracle n'utilise pas l'index. A savoir que j'ai également lancé la commande
"analyze table CSSOR compute statistics;"
Afin qu'Oracle puisse revoir le plan d’exécution.
Merci d'avance pour vos réponses.
Cordialement,
Paul
Partager