Quelle est la différence entre les vues et les vues matérialisées dans Oracle?

Réponses:

356

Les vues matérialisées sont basées sur le disque et sont mises à jour périodiquement en fonction de la définition de la requête.

Les vues sont virtuelles uniquement et exécutent la définition de la requête à chaque accès.

dacracot
la source
54
De plus, lorsque vous avez besoin de performances sur des données qui n'ont pas besoin d'être à jour à la seconde près, les vues matérialisées sont meilleures, mais vos données seront plus anciennes que dans une vue standard. Habituellement, les rapports BI tirent beaucoup d'avantages des vues matérialisées.
Marthinus
29
@Marthinus - c'est exact sauf dans le cas d'une vue matérialisée qui est REFRESH ON COMMIT - le MV retournera exactement les données qui ont été validées.
Jeffrey Kemp
2
Quelle est la signification de DISK based? Est-ce que la table ne fait pas partie du disque? Est-il stocké dans un fichier et l'accès au disque est plus rapide que l'accès au fichier ....?
Kanagavelu Sugumar
1
@KanagaveluSugumar Oui, les tables réelles sont également écrites sur le disque.
dacracot
5
@dacracot Merci! je pense que vous voulez dire autre que les tables DB dans le disque; ce MVIEW maintient également une table en résolvant toutes les jointures. Pour que dans la runtime, l'accès à une seule table soit suffisant; et pas besoin d'interroger plusieurs tables pour les conditions de jointure, ce qui est généralement fait par la vue normale. Je vous remercie!
Kanagavelu Sugumar
333

Vues

Ils évaluent les données des tables sous-jacentes à la définition de la vue au moment où la vue est interrogée . Il s'agit d'une vue logique de vos tables, sans aucune donnée stockée ailleurs.

L'avantage d'une vue est qu'elle vous renverra toujours les dernières données . L' inconvénient d'une vue est que ses performances dépendent de la qualité d'une instruction de sélection sur laquelle la vue est basée. Si l'instruction select utilisée par la vue rejoint de nombreuses tables ou utilise des jointures basées sur des colonnes non indexées, la vue risque de mal fonctionner.

Vues matérialisées

Ils sont similaires aux vues standard, en ce sens qu'ils constituent une vue logique de vos données (basée sur une instruction select), cependant, le jeu de résultats de requête sous - jacent a été enregistré dans une table . L'avantage est que lorsque vous interrogez une vue matérialisée, vous interrogez une table , qui peut également être indexée.

De plus, comme toutes les jointures ont été résolues au moment de l'actualisation de la vue matérialisée, vous payez le prix de la jointure une fois (ou aussi souvent que vous actualisez votre vue matérialisée), plutôt que chaque fois que vous sélectionnez dans la vue matérialisée. De plus, avec la réécriture de requête activée, Oracle peut optimiser une requête qui sélectionne à partir de la source de votre vue matérialisée de telle sorte qu'elle lit à la place à partir de votre vue matérialisée. Dans les situations où vous créez des vues matérialisées sous forme de tableaux agrégés ou de copies de requêtes fréquemment exécutées, cela peut considérablement accélérer le temps de réponse de votre application utilisateur final. L' inconvénient est que les données que vous récupérez de la vue matérialisée ne sont aussi à jour que la dernière fois que la vue matérialisée a été actualisée .


Les vues matérialisées peuvent être définies pour s'actualiser manuellement, selon un calendrier défini ou en fonction de la base de données détectant une modification des données de l'une des tables sous-jacentes . Les vues matérialisées peuvent être mises à jour de manière incrémentielle en les combinant avec des journaux de vues matérialisées, qui agissent comme des sources de capture de données modifiées sur les tables sous-jacentes.

Les vues matérialisées sont le plus souvent utilisées dans les applications d'entreposage de données / de veille stratégique où l'interrogation de grandes tables de faits avec des milliers de millions de lignes entraînerait des temps de réponse aux requêtes qui aboutiraient à une application inutilisable.


Les vues matérialisées contribuent également à garantir un moment cohérent dans le temps, similaire à l' isolement de l'instantané .

Mike Williamson
la source
9
+1 pour l'explication détaillée, mais quel est l'inconvénient de la réécriture des requêtes? Si la réécriture des requêtes permet à Oracle d'optimiser encore plus la requête, nous devrions TOUJOURS activer la réécriture des requêtes, non?
Rosdi Kasim
6
@Rosdi, il l'a dit: "les données que vous récupérez de la vue matérialisée ne sont aussi à jour que la dernière fois que la vue matérialisée a été actualisée"
Jeffrey Kemp
49

Une vue utilise une requête pour extraire des données des tables sous-jacentes.

Une vue matérialisée est une table sur disque qui contient le jeu de résultats d'une requête.

Les vues matérialisées sont principalement utilisées pour augmenter les performances des applications lorsqu'il n'est pas possible ou souhaitable d'utiliser une vue standard avec des index qui lui sont appliqués. Les vues matérialisées peuvent être mises à jour régulièrement via des déclencheurs ou en utilisant l' ON COMMIT REFRESHoption. Cela nécessite quelques autorisations supplémentaires, mais ce n'est rien de complexe. ON COMMIT REFRESHest en place depuis au moins Oracle 10.

Jeremiah Peschka
la source
Il y a une option "REFRESH ON COMMIT" qui peut être spécifiée sur une vue matérialisée
Hybris95
Merci! Je mettrai à jour la réponse. Savez-vous quand cette fonctionnalité a été ajoutée à Oracle?
Jeremiah Peschka
20

Les vues sont essentiellement des structures logiques de type table remplies à la volée par une requête donnée. Les résultats d'une requête de vue ne sont stockés nulle part sur le disque et la vue est recréée à chaque exécution de la requête. Les vues matérialisées sont des structures réelles stockées dans la base de données et écrites sur le disque. Ils sont mis à jour en fonction des paramètres définis lors de leur création.

user12786
la source
Quelle est la signification de DISK based? Est-ce que la table ne fait pas partie du disque? Est-il stocké dans un fichier et l'accès au disque est plus rapide que l'accès au fichier ....?
Kanagavelu Sugumar
18

Vue matérialisée - une table sur un disque qui contient le jeu de résultats d'une requête

Vue sans matérialisation - une requête qui extrait des données de la table sous-jacente

fn27
la source
7

Vue: la vue n'est qu'une requête nommée. Il ne stocke rien. Lorsqu'une requête est affichée, elle exécute la requête de la définition de la vue. Les données réelles proviennent du tableau.

Vues matérialisées: stockent les données physiquement et sont mises à jour périodiquement. Lors de l'interrogation de MV, il fournit des données de MV.

smshafiqulislam
la source
2

Ajout à la réponse assez complète de Mike McAllister ...

Les vues matérialisées ne peuvent être définies pour s'actualiser automatiquement via la base de données en détectant les modifications que lorsque la requête de vue est considérée comme simple par le compilateur. S'il est considéré comme trop complexe, il ne sera pas en mesure de configurer des déclencheurs essentiellement internes pour suivre les modifications dans les tables source afin de ne mettre à jour que les lignes modifiées dans la table mview.

Lorsque vous créez une vue matérialisée, vous constaterez qu'Oracle crée à la fois la mview et une table portant le même nom , ce qui peut prêter à confusion.

Ragoût S
la source
Les tables qui prennent en charge une vue matérialisée ne portent pas le même nom que la vue.
Jeffrey Kemp
@JeffreyKemp, êtes-vous sûr? La réponse acceptée ici stackoverflow.com/a/33552513 affirme le contraire. Bien que oui, cela a peut-être été différent en 2010 lorsque vous avez commenté ...
leqid
Mon commentaire ci-dessus doit avoir été sur une ancienne version (probablement 9i). Vous avez raison, les MV ont une table du même nom au moins dans les versions modernes.
Jeffrey Kemp
1

Les vues matérialisées sont la vue logique des données pilotées par la requête de sélection, mais le résultat de la requête sera stocké dans la table ou le disque, la définition de la requête sera également stockée dans la base de données.

Les performances de la vue matérialisée sont meilleures que celles de la vue normale, car les données de la vue matérialisée seront stockées dans le tableau et le tableau peut être indexé plus rapidement pour la jointure. joindre l'instruction comme en cas de vue.

Autre différence, en cas de vue, nous obtenons toujours les dernières données, mais en cas de vue matérialisée, nous devons actualiser la vue pour obtenir les dernières données. Dans le cas de la vue matérialisée, nous avons besoin d'un déclencheur supplémentaire ou d'une méthode automatique pour que MV puisse être actualisé, ce n'est pas requis pour les vues dans la base de données.

Dhirendra Gautam
la source