Bonjour,
j'ai une requête qui met un petit plus d'une heure pour s'exécuter, et je souhaiterais l'optimiser.
Pouvez-vous me dire si vous voyez des pistes d'amélioration ?
Voici ma requête :
Les volumétries de mes 3 tables sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select /*+ parallel(mesure,5) */ ma_table2.*, MAX (NVL (ma_table1.canal, -1)) OVER (PARTITION BY ma_table1.idr , ma_table2.date) maxcanal FROM (TMP tmp LEFT OUTER JOIN ma_table1 ON (ma_table1.idr = tmp.nom AND ma_table1.type = 'TYP') LEFT OUTER JOIN ma_table2 ON (ma_table1.id = ma_table2.id AND ma_table2.date >= GREATEST (tmp.datedebut, ma_table1.datedebut) AND datepoint < LEAST (tmp.datefin + 1, ma_table1.datefin + 1) );
- pour TMP : 5 000 enregistrements.
- pour ma_table1 : 150 000 enregistrements.
- pour ma_table2 : 4 500 000 000 enregistrements.
J'ai identifié 2 axes d'amélioration qui sont coûteux :
- les LEFT OUTER JOIN
- l'opération d'aggrégation : MAX (NVL (ma_table1.canal, -1)) OVER (PARTITION BY ma_table1.idr , ma_table2.date) maxchannel.
Mais je ne vois aucun moyen pour contourner cela.
Avez-vous des pistes à me proposer ?
En espérant avoir un peu d'aide à ce sujet...
Merci,
Berni.
Partager