Question

Je vais concevoir un DW et j'ai entendu parler des vues matérialisées. En fait, je veux créer une vue et il devrait mettre à jour automatiquement lorsque les tables de base sont modifiées. Quelqu'un peut-il expliquer avec un exemple de requête ..

Était-ce utile?

La solution

On les appelle vues indexées dans SQL Server - lire ces livres blancs pour plus d'arrière-plan:

En fait, tout ce que vous devez faire est:

  • créer une vue régulière
  • créer un index cluster sur ce point de vue

et vous avez terminé!

La partie la plus délicate est la suivante: le point de vue doit satisfaire un certain nombre de contraintes et limites - celles-ci sont décrites dans le livre blanc. Si vous faites cela - qui est tout ce qu'il ya. La vue est mise à jour automatiquement, aucun entretien nécessaire.

Ressources supplémentaires:

Autres conseils

Bien que purement du point de vue de l'ingénierie, des vues indexées sonore comme tout le monde quelque chose pourrait utiliser pour améliorer les performances, mais le scénario de la vie réelle est très différente. J'ai échoué est d'utiliser des vues indexées où je le plus besoin d'eux à cause de trop de restrictions sur ce qui peut être indexé et ce qui ne peut pas.

Si vous avez des jointures externes dans les vues, ils ne peuvent pas être utilisés. En outre, les expressions de table communes ne sont pas autorisés ... En fait, si vous avez une commande dans les sous-requêtes ou tables dérivées (comme avec la partition par article), vous êtes hors de la chance aussi.

Cela ne laisse que des scénarios très simples à UTILISERA vues indexées, quelque chose à mon avis, peut être optimisé en créant des index appropriés sur les tables sous-jacentes de toute façon.

Je serai ravi d'entendre de véritables scénarios de vie où les gens ont effectivement utilisé des vues indexées à leur avantage et ne pouvait pas faire sans eux

Vous pourriez avoir besoin d'un peu plus d'information sur ce qu'est une vue matérialisée est en réalité. Dans Oracle ce sont un objet qui se compose d'un certain nombre d'éléments lorsque vous essayez de le construire ailleurs.

Un MVIEW est essentiellement un instantané des données provenant d'une autre source. Contrairement à une vue des données ne se trouve pas lorsque vous interrogez la vue, il est stocké localement sous forme de tableau. Le MVIEW est actualisé en utilisant une procédure de fond qui se déclenche à intervalles réguliers ou lorsque les changements de données source. Oracle permet de régénérations intégrales ou partielles.

Dans SQL Server, j'utiliser ce qui suit pour créer une base pour MVIEW (complet) rafraîchir régulièrement.

D'abord, une vue. Cela devrait être facile pour la plupart depuis des vues sont assez courantes dans une base de données Ensuite, une table. Cela devrait être identique à la vue dans les colonnes et les données. Cela enregistre un instantané des données de vue. Ensuite, une procédure qui tronque la table, et il rechargements sur la base des données actuelles dans la vue. Enfin, un travail qui déclenche la procédure pour commencer le travail de lui.

Tout est autre expérimentation.

vue indexée n'est pas une option, et des mises à jour rapides ne sont pas nécessaires, vous pouvez créer une table de cache bidouille:

select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...

puis sp_rename vue / table ou modifier toutes les questions ou d'autres vues qui y font référence à un point à la table de cache.

prochain programme de rafraîchissement par jour / nuit / semaine / tout le reste comme

begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction

NB: cela manger l'espace, aussi dans vos journaux tx. Meilleur utilisé pour les petits ensembles de données qui sont lentes à calculer. Peut-être refactoring pour éliminer les colonnes « facile, mais les grands » d'abord dans une vue extérieure.

Pour MS T-SQL Server, je suggère à la recherche dans la création d'un index avec la mention « inclure ». Unicité n'est pas nécessaire, ni le tri physique des données associées à un index ordonné en clusters. « Index ... Inclure () » crée un stockage de données physique distinct maintenu automatiquement par le système. Il est conceptuellement très similaire à une vue Oracle Matérialisé.

https://msdn.microsoft.com/en-us/library/ ms190806.aspx

https://technet.microsoft.com/en-us/library/ ms189607 (v = SQL.105) .aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top