Bonjour,
Je suis confronté à une requête SQL un peu complexe et qui peut prendre un temps d'exécution excessif ( >>5h)
dans un premier temps je pense réorganiser les bouts de code de la requête.
la requête est sous la forme suivante :
Vous avez surement remarqué qu'un select imbriqué se répète deux fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 (select nom, prenom from employe, entite where employe.entite = entite.id and entite.id = 34894) retenu
à 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.
Partager