Optimisation d'une requête complexe (Oracle 10g)
Bonjour,
Je suis confronté à une requête SQL un peu complexe et qui peut prendre un temps d'exécution excessif ( >>5h :roll:)
dans un premier temps je pense réorganiser les bouts de code de la requête.
la requête est sous la forme suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
Select entite.libelle,
candidat.nom,
candidat.prenom,
candidat.date,
...
from
candidat,
entite,
employe,
service,
(select nom,
prenom
from employe,
entite
where employe.entite = entite.id
and entite.id = 34894) retenu
where
date = to_date('14/05/2008','DD/MM/YYYY'),
and division.id = entite.division
and retenu.nom = candidat.nom
and retenu.prenom = candidat.prenom
and cadidat.type = 'interne'
union
Select entite.libelle,
candidat.nom,
candidat.prenom,
candidat.date,
...
from
prestataire,
employeur,
employe,
service,
(select nom,
prenom
from employeur,
entite
where employe.entite = entite.id
and entite.id = 34894) retenu
where
date = to_date('14/05/2008','DD/MM/YYYY'),
and division.id = entite.division
and retenu.nom = prestataire.nom
and retenu.prenom = prestataire.prenom
and prestataire.profil = 'SAP' |
Vous avez surement remarqué qu'un select imbriqué se répète deux fois.
Code:
1 2 3 4 5 6
| (select nom,
prenom
from employe,
entite
where employe.entite = entite.id
and entite.id = 34894) retenu |
je cherche à récupérer les résultats de ce select(retenu), et le réutiliser autant de fois. sans avoir à lancer la sous requête une deuxième fois.
à titre indicatif, le temps de traitement est divisé par 3 si je stock le résultat de cette requête dans une table temporaire. sauf que ce n'est pas propre, surtout si cette requête est lancé par plusieurs utilisateurs en même temps...
D'avance merci pour vos réponses.