Problème de performance avec un to_date dans where clause
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:
Code:
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 |
Dans l'exemple ci-dessus, end_ts représente la date de validité.
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:
Code:
1 2 3
| Select sum(val01)
from ma_table
where end_ts = to_date('15-AUG-2050', 'DD-MMM-YYYY'); |
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.
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