bonjour,
sous oralce 9.2, nous avons une requête sql ("ma_requete") qui met 10 min à s'exécuter car elle parcourt plusieurs partitions. trop long pour nos utilisateurs, alors pour y remédier, j'ai créé une vue matérialisée avec le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
CREATE MATERIALIZED VIEW ma_MV
   PARALLEL (degree 2)
   BUILD IMMEDIATE
   REFRESH COMPLETE
   ENABLE QUERY REWRITE
AS
   ma_requete ;
j'ai modifié les paramètres du moteur oracle comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
   ALTER SYSTEM SET QUERY_REWRITE_ENABLED = FORCE;
   ALTER SYSTEM SET QUERY_REWRITE_INTEGRITY = STALE_TOLERATED;
   ALTER SYSTEM SET OPTIMIZER_MODE = CHOOSE;
Une fois la vue créée, je repasse la requete de départ (ma_requete) qui s'exécute encore en 10 min.
Lorsque je fais un explain plan de la requete, il me dit bien que je passe bien par la vue matérialisée.
Je ne comprend donc pas pourquoi la requête met toujours autant de temps. Je pensais qu'en passant par la vue matérialisée grâce à la réécriture de requête, le moteur oracle ferait un simple "select * from ma_MV" qui serait ainsi beaucoup plus rapide.

aurais-je zapper quelques chose à faire ? Pourriez-vous SVP m'éclairer sur ce point ?

L'objectif est que cela soit transparent pour les utilisateurs (i.e pas select directement dans la MV) lorsqu'ils font leurs requêtes. Je suis donc preneur de toute solution pouvant améliorer les performances de cette requête sql.

NB: le code da la requête en lui même est déjà optimisé.

Merci d'avance de votre aide.