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 : 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
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 : 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');
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