Je vais concevoir un DW et j'ai entendu parler de vues matérialisées. En fait, je veux créer une vue et elle devrait se mettre à jour automatiquement lorsque les tables de base sont modifiées. Quelqu'un peut-il expliquer avec un exemple de requête ...
101
Bien que purement du point de vue de l'ingénierie, les vues indexées semblent être quelque chose que tout le monde pourrait utiliser pour améliorer les performances, mais le scénario réel est très différent. Je n'ai pas réussi à utiliser des vues indexées là où j'en ai le plus besoin en raison de trop de restrictions sur ce qui peut être indexé et ce qui ne le peut pas.
Si vous avez des jointures externes dans les vues, elles ne peuvent pas être utilisées. De plus, les expressions de table courantes ne sont pas autorisées ... En fait, si vous avez un ordre dans les sous-sélections ou les tables dérivées (comme avec partition par clause), vous n'avez pas de chance aussi.
Cela ne laisse que des scénarios très simples à utiliser des vues indexées, quelque chose à mon avis peut être optimisé en créant de toute façon des index appropriés sur les tables sous-jacentes.
Je serai ravi d'entendre certains scénarios de la vie réelle où les gens ont effectivement utilisé des vues indexées à leur avantage et n'auraient pas pu se passer d'eux
la source
(NOEXPAND)
indice aux requêtes qui utilisent les vues indexées. Et puis vous remarquez la différence. L'avantage d'utiliser les vues indexées par rapport à «indexer correctement les tables» est de limiter la sélection des enregistrements, sinon vous avez raison, ce serait pareil.Vous aurez peut-être besoin d'un peu plus d'informations sur ce qu'est réellement une vue matérialisée. Dans Oracle, il s'agit d'un objet composé d'un certain nombre d'éléments lorsque vous essayez de le construire ailleurs.
Un MVIEW est essentiellement un instantané de données provenant d'une autre source. Contrairement à une vue, les données ne sont pas trouvées lorsque vous interrogez la vue, elles sont stockées localement sous forme de table. Le MVIEW est actualisé à l'aide d'une procédure d'arrière-plan qui démarre à intervalles réguliers ou lorsque les données source changent. Oracle permet des actualisations complètes ou partielles.
Dans SQL Server, j'utiliserais ce qui suit pour créer un MVIEW de base pour (terminer) l'actualisation régulièrement.
Tout d'abord, une vue. Cela devrait être facile pour la plupart car les vues sont assez courantes dans n'importe quelle base de données Ensuite, une table. Cela doit être identique à la vue dans les colonnes et les données. Cela stockera un instantané des données de vue. Ensuite, une procédure qui tronque la table et la recharge en fonction des données actuelles de la vue. Enfin, un travail qui déclenche la procédure pour démarrer son travail.
Tout le reste est expérimentation.
la source
Lorsque la vue indexée n'est pas une option et que des mises à jour rapides ne sont pas nécessaires, vous pouvez créer une table de cache de piratage:
puis sp_rename view / table ou modifiez toutes les requêtes ou autres vues qui la référencent pour qu'elles pointent vers la table de cache.
planifier quotidiennement / tous les soirs / hebdomadaires / quoi de neuf
NB: cela va manger de l'espace, également dans vos logs tx. Idéal pour les petits ensembles de données lents à calculer. Peut-être refactoriser pour éliminer d'abord les colonnes «faciles mais grandes» dans une vue extérieure.
la source
Pour MS T-SQL Server, je suggère de créer un index avec l'instruction "include". L'unicité n'est pas requise, pas plus que le tri physique des données associé à un index clusterisé. Le "Index ... Inclure ()" crée un stockage de données physique distinct automatiquement maintenu par le système. Il est conceptuellement très similaire à une vue matérialisée Oracle.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx
la source