Oui , les vues peuvent avoir un index cluster affecté et, lorsqu'elles le font, elles stockent des résultats temporaires qui peuvent accélérer les requêtes résultantes.
Mise à jour: au moins trois personnes m'ont voté contre celui-ci. Avec tout le respect que je vous dois, je pense qu'ils ont tout simplement tort; La propre documentation de Microsoft indique très clairement que Views peut améliorer les performances.
Premièrement, les vues simples sont développées sur place et ne contribuent donc pas directement à l'amélioration des performances - c'est vrai. Cependant, les vues indexées peuvent considérablement améliorer les performances.
Permettez-moi d'aller directement à la documentation:
Une fois qu'un index cluster unique est créé sur la vue, le jeu de résultats de la vue est immédiatement matérialisé et persiste dans le stockage physique dans la base de données, ce qui évite de surcharger l'exécution de cette opération coûteuse au moment de l'exécution.
Deuxièmement, ces vues indexées peuvent fonctionner même lorsqu'elles ne sont pas directement référencées par une autre requête, car l'optimiseur les utilisera à la place d'une référence de table le cas échéant.
Encore une fois, la documentation:
La vue indexée peut être utilisée dans une exécution de requête de deux manières. La requête peut référencer directement la vue indexée ou, plus important encore, l'optimiseur de requête peut sélectionner la vue s'il détermine que la vue peut être remplacée par une partie ou la totalité de la requête dans le plan de requête le moins cher. Dans le second cas, la vue indexée est utilisée à la place des tables sous-jacentes et de leurs index ordinaires. La vue n'a pas besoin d'être référencée dans la requête pour que l'optimiseur de requête l'utilise pendant l'exécution de la requête. Cela permet aux applications existantes de bénéficier des vues indexées nouvellement créées sans modifier ces applications.
Cette documentation, ainsi que des graphiques illustrant les améliorations des performances, sont disponibles ici .
Mise à jour 2: la réponse a été critiquée sur la base que c'est l '"index" qui fournit l'avantage de performance, pas le "View". Cependant, cela est facilement réfuté.
Disons que nous sommes une entreprise de logiciels dans un petit pays; Je vais utiliser la Lituanie comme exemple. Nous vendons des logiciels dans le monde entier et conservons nos enregistrements dans une base de données SQL Server. Nous avons beaucoup de succès et donc, dans quelques années, nous avons plus de 1 000 000 d'enregistrements. Cependant, nous devons souvent déclarer des ventes à des fins fiscales et nous constatons que nous n'avons vendu que 100 copies de nos logiciels dans notre pays d'origine. En créant une vue indexée uniquement des enregistrements lituaniens, nous pouvons conserver les enregistrements dont nous avons besoin dans un cache indexé comme décrit dans la documentation MS. Lorsque nous exécutons nos rapports sur les ventes lituaniennes en 2008, notre requête recherche dans un index d'une profondeur de seulement 7 (Log2 (100) avec quelques feuilles inutilisées). Si nous devions faire de même sans la VUE et en nous appuyant simplement sur un index dans la table, nous aurions à parcourir une arborescence d'index avec une profondeur de recherche de 21!
De toute évidence, la vue elle-même nous fournirait un avantage de performance (3x) par rapport à la simple utilisation de l'index seul. J'ai essayé d'utiliser un exemple réel, mais vous remarquerez qu'une simple liste de ventes lituaniennes nous donnerait un avantage encore plus grand.
Notez que j'utilise simplement un arbre b droit pour mon exemple. Bien que je sois assez certain que SQL Server utilise une variante d'une arborescence b, je ne connais pas les détails. Néanmoins, le point tient.
Mise à jour 3: la question s'est posée de savoir si une vue indexée utilise uniquement un index placé sur la table sous-jacente. C'est-à-dire, pour paraphraser: "une vue indexée est juste l'équivalent d'un index standard et elle n'offre rien de nouveau ou unique à une vue." Si c'était vrai, bien sûr, alors l'analyse ci-dessus serait incorrecte! Permettez-moi de fournir une citation de la documentation Microsoft qui montre pourquoi je pense que cette critique n'est pas valide ou vraie:
L'utilisation d'index pour améliorer les performances des requêtes n'est pas un nouveau concept; cependant, les vues indexées offrent des avantages de performances supplémentaires qui ne peuvent pas être obtenus à l'aide d'index standard.
Avec la citation ci-dessus concernant la persistance des données dans le stockage physique et d'autres informations dans la documentation sur la façon dont les indices sont créés sur les vues, je pense qu'il est sûr de dire qu'une vue indexée n'est pas seulement un SQL Select mis en cache qui arrive à utiliser un index défini sur la table principale. Ainsi, je continue de maintenir cette réponse.