Bonjour à tous,
J'ai un soucis de performance avec une de mes requêtes SQL.
Cette requête exécute une recherche dans une table d'audit contenant une date de validité afin de construire une vue.
Les données sources sont stockées dans une table:
Dans l'exemple ci-dessus, end_ts représente la date de validité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 id val01 end_ts 1 1 01-JAN-2011 2 3 03-MAR-2011 3 5 15-AUG-2050 4 3 15-AUG-2050
Les données courantes sont celles ayant end_ts = 15-AUG-2050 (une date future qui est la même pour tous les records courants - me demandez pas pourquoi cette date...), soit les records 3 & 4.
La vue ne doit afficher que les données courantes et leur appliquer une fonction d'aggrégation (une somme).
Afin de ne récupérer que les données courantes, je dois donc filtrer les données, ce que je fais comme cela:
Le soucis, c'est que l'utilisation de la fonction to_date réduit de manière trop importante les performances de ma requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Select sum(val01) from ma_table where end_ts = to_date('15-AUG-2050', 'DD-MMM-YYYY');
Quand j'exécute la requête sans where clause, quelques secondes suffisent.
Par contre, avec where clause, plusieurs dizaines de minutes sont nécessaires (j'ai environ 400 000 records dans ma_table)
Je commence donc à envisager de ne plus faire de vue, mais une seconde table, rafraichie avec une procédure SQL (qui me permettrait de stocker le résultat de to_date('15-AUG-2050', 'DD-MMM-YYYY') dans une variable, puis d'utiliser cette variable dans la where clause)
Cependant, me gène de ne plus avoir de vue, je serais obligé de forcer un rafraichissement (job schedulé), et surtout, je me demande s'il n'y a pas de possibilité pour faire autrement!
Merci par avance pour votre aide
Partager