2011-01-17 1 views
1

J'ai deux tables STATEMENT et TRANSACTION, sur lesquelles j'aimerais créer une vue. Les deux tables ont ID (VARCHAR2) et TS (NUMBER).Mise en cache de valeur Oracle lors de la génération d'une vue?

Pour chaque ID, STATEMENT est généré tous les mois, en fonction de TRANSACTION et d'autres tables.

La vue comporte 3 colonnes: ID, TS et VALUE. Chaque ligne de la vue correspond à une ligne dans STATEMENT et VALUE est une agrégation plutôt complexe en fonction de STATEMENT et TRANSACTION. Plus précisément, la partie de VALUE extraite de TRANSACTION est constante pour chaque ID, indépendamment de TS.

Puisque cette valeur agrégée ne change pas, Oracle la cache-t-elle automatiquement? Sinon, est-il possible de mettre les valeurs en cache quelque part, par exemple, en créant une vue intermédiaire pour cette valeur?

Répondre

3

Les vues non matérialisées ne sont pas mises en mémoire cache. Il s'agit simplement d'instructions SQL contenues qui sont exécutées lorsqu'une référence est exécutée dans une instruction en cours d'exécution. Considérez-les comme une macro ou une variable pour l'instruction contenue dans la vue. Il n'y a donc pas de valeur de performance pour la superposition des vues - en ayant une référence pour l'autre.

Oracle prend en charge les vues matérialisées, mais materialized views are notoriously restrictive - aucune fonction non-déterministe, etc.

Pour faire la différence, CREATE VIEW crée une vue non matérialisée. Oracle nécessite le mot clé MATERIALIZED: CREATE MATERIALIZED VIEW ... pour que la vue soit matérialisée.

Questions connexes