Mise à jour de la vue matérialisée lorsque urderlying changement de tables
J'ai une vue matérialisée définie de cette manière:
CREATE MATERIALIZED VIEW M_FOO
REFRESH COMPLETE ON COMMIT
AS
SELECT FOO_ID, BAR
FROM FOO
WHERE BAR IS NOT NULL
GROUP BY FOO_ID, BAR
/
COMMENT ON MATERIALIZED VIEW M_FOO IS 'Foo-Bar pairs';
Je l'ai écrit comme une sorte de cache: la table source est énorme, mais le nombre de paires différentes est assez petite. J'ai besoin de ces paires pour les obtenir est Joint à d'autres tables. So far So good: il absolument des vitesses de requêtes.
Mais je veux faire en sorte que la vue ne contient pas de données obsolètes. La table sous-jacente est modifié de quatre ou cinq fois par mois, mais je n'ai pas forcément de savoir quand. Je comprends qu'une vue matérialisée peut être défini de telle sorte qu'il met à jour lorsque les tables source de changement. Cependant, les docs obtenir assez compliquer.
- Quelle est la syntaxe exacte j'ai besoin de
utilisez? - Dois-je créer un matérialisé
afficher le journal? - Quelle est la différence entre la vitesse
et complet de rafraîchissement?
OriginalL'auteur | 2010-01-08
Vous devez vous connecter pour publier un commentaire.
À vos questions dans l'ordre inverse
Un rafraîchissement RAPIDE est également connu comme une actualisation incrémentielle. Cela devrait vous donner une idée de la différence. Une actualisation COMPLÈTE reconstruit l'ensemble de la MVIEW à partir de zéro, alors qu'un rafraîchissement RAPIDE s'applique simplement les changements de DML exceuted contre le chargeur de table(s).
Afin de faire exécuter RAPIDEMENT rafraîchit vous besoin des MVIEW JOURNAL.
Comme pour la syntaxe, et bien voici les bases:
La
ON COMMIT
clause signifie que le MVIEW est actualisé de manière transactionnelle (par opposition àON DEMAND
qui est régulièrement actualiser en vrac). LeREFRESH
clauses spécifie s'il faut appliquer des différentiels ou des actualisations complètes. Il y a certaines catégories de requête qui force l'utilisation deCOMPLETE
d'actualisation, bien que ceux-ci semblent diminuer avec chaque nouvelle version d'Oracle.Un test rapide pour voir que cela fonctionne ...
Un nouveau record?
Vous pouvez trouver plus de détails sur la syntaxe de la Référence SQL. Il est également intéressant de lire les Vue matérialisée chapitre dans le Guide d'Entreposage de Données.
Le résultat, dit-12 lignes sont sélectionnées, mais en comptant la main seulement les résultats en 11...
OriginalL'auteur APC
Un rafraîchissement rapide uniquement insérer/mettre à jour/supprimer des données modifiées dans la vue matérialisée. Une actualisation complète de vider la vue matérialisée et ensuite copier toutes les lignes.
La "validation" s'entend de la vue matérialisée sera actualisé à chaque fois qu'un changement s'est engagé dans la table maître. Si votre syntaxe va être extrêmement inefficace. Chaque fois que quelqu'un modifie une ligne de foo, m_foo sera tronqué et puis chaque ligne de foo tableau sera inséré.
Vous pouvez faire mieux avec rapide rafraîchit, où seules les lignes modifiées dans foo sera envoyé à m_foo. Qui vous donne de la consistance, sans beaucoup de frais généraux.
créer des vues matérialisées sur foo avec une clé primaire; -- en supposant que vous avez une clé primaire, vous devez
créer des vues matérialisées m_foo de rafraîchissement rapide à s'engager en tant qu' \;
Il y a quelques subtilités supplémentaires grâce à des subventions et des synonymes si vous utilisez db liens, ou le schéma qui possède foo n'est pas celui qui possède m_foo.
si la source est un point de vue au lieu de cela, prend-il en charge de rafraîchissement rapide?
OriginalL'auteur Jim Hudson