Est un point de vue plus rapide qu'une simple requête?
Est un
select * from myView
plus vite que la requête elle-même pour créer la vue (dans l'ordre d'avoir le même jeu de résultats):
select * from ([query to create same resultSet as myView])
?
Il n'est pas totalement clair pour moi si la vue utilise une sorte de cache en le rendant plus rapide par rapport à une requête simple.
- Iam pas sûr au sujet d'un point de vue, mais vues imbriquées est le total de la performance de l'enfer.
Vous devez vous connecter pour publier un commentaire.
Oui, les vues peuvent avoir un index cluster attribué et, quand ils le font, ils vont stocker des résultats temporaires qui peuvent accélérer résultant des requêtes.
Mise à jour: Au moins trois personnes ont voté moi en bas sur celui-ci. Avec tout le respect dû, je pense qu'ils sont tout simplement faux; Microsoft documentation du fait qu'il est très clair que les points de Vue peuvent améliorer les performances.
Tout d'abord, de simples points de vue sont développés en place et donc ne contribuent pas directement à des améliorations de performances - c'est vrai. Cependant, vues indexées peuvent considérablement améliorer les performances.
Permettez-moi d'aller directement à la documentation:
Deuxièmement, ces vues indexées peuvent travailler même quand ils ne sont pas directement référencée par une autre requête que l'optimiseur de les utiliser à la place d'un tableau de référence le cas échéant.
Encore une fois, de la documentation:
Cette documentation, ainsi que des graphiques montrant des améliorations de performances, peut être trouvé ici.
Mise à jour 2: la réponse a été critiquée au motif qu'elle est "index" qui offre l'avantage de performance, de ne pas "Voir". Cependant, cela est facilement réfutée.
Nous disons que nous sommes une société de logiciels dans un petit pays; je vais utiliser la Lituanie comme un exemple. Nous vendons des logiciels dans le monde et de garder nos enregistrements dans une base de données SQL Server. Nous sommes très réussie, et donc, dans quelques années, nous avons 1 000 000 de+ enregistrements. Cependant, nous avons souvent besoin de rapport des ventes pour les fins de l'impôt et nous constatons que nous avons vendu seulement 100 exemplaires de notre logiciel dans notre pays d'origine. Par la création d'une vue indexée de juste le lituanien enregistrements, nous arrivons à conserver les documents dont nous avons besoin dans un indexée cache comme indiqué dans le MS de la documentation. Lorsque nous effectuons nos rapports lituanien chiffre d'affaires en 2008, notre requête de recherche par l'intermédiaire d'un index avec une profondeur de seulement 7 (Log2(100), avec une partie inutilisée des feuilles). Si nous devions faire la même chose sans la VUE et simplement en s'appuyant sur un index dans la table, nous aurions à traverser un arbre d'index avec une recherche en profondeur des 21!
Clairement, la Vue elle-même nous apporterait un avantage de performance (3x) sur la simplicité d'utilisation de l'index seul. J'ai essayé d'utiliser un exemple réel, mais vous remarquerez qu'une simple liste de lituanien ventes pourrait nous donner un avantage encore plus important.
Remarque que je suis juste à l'aide d'une droite b-tree pour mon exemple. Alors que je suis assez certain que SQL Server utilise une variante d'un b-arbre, je ne connais pas les détails. Néanmoins, le point détient.
Mise à jour 3: La question a été soulevée de savoir si une Vue Indexée utilise juste un index placé sur la table sous-jacente. C'est, pour paraphraser: "une vue indexée est juste l'équivalent d'un index standard et il n'offre rien de nouveau ou unique à vue". Si c'était vrai, bien sûr, puis de l'analyse ci-dessus serait incorrect! Permettez-moi de vous fournir une soumission de la documentation de Microsoft qui expliquent pourquoi je pense que cette critique n'est pas valide ou vrai:
Avec la citation ci-dessus au sujet de 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 points de Vue, je pense qu'il est sûr de dire qu'une Vue Indexée est pas juste un cache SQL Select qui arrive à utiliser un index défini sur la table principale. Donc, je continue de rester par cette réponse.
SELECT * FROM MyView
. Il a fallu 2 minutes et 34 secondes pour s'exécuter. Si j'exécute la requête sous-jacente de la vue, il s'exécute en 2 secondes. Une autre requête plus complexe qui fait référence à la vue aussi s'exécute lentement, mais quand je remplace la vue référencée dans la requête avec un select imbriquées, il fonctionne beaucoup plus rapidement. Pourquoi pensez-vous de ce qui se passe? Mon expérience est que l'utilisation de points de vue rend requêtes plus facile à lire ou réutiliser, mais n'améliore pas les performances.En général, non. Les vues sont principalement utilisés pour plus de commodité et de sécurité, pas pour les améliorations de la vitesse.
Cela dit, SQL Server 2000 et au-dessus ont une fonction spéciale appelée Vues Indexées que peut grandement améliorer les performances, mais vous avez à créer des vues indexées à la suite d'une très ensemble de lignes directrices.
Il est une référence importante dans la documentation en Ligne en ce qui concerne vue de la résolution.
Voici un article qui décrit les avantages et création de vues indexées:
Dans SQL Server au moins, les plans de Requête sont stockés dans le cache de plan pour les deux points de vue et ordinaire des requêtes SQL, basé sur la requête de paramètres. Pour tous les deux, ils sont supprimés du cache lorsqu'ils n'ont pas été utilisées pendant une assez longue période de temps et de l'espace est nécessaire pour certains autres nouvellement soumis de requête. Après quoi, si la même requête est émise, il est recompilé, et le plan est mis de nouveau dans le cache. Donc non, il n'y a pas de différence, étant donné que vous êtes en réutilisant la même requête SQL et le même point de vue avec la même fréquence.
Évidemment, en général, un point de vue, de par leur nature même (Que quelqu'un a pensé que c'était pour être utilisé assez souvent pour en faire un point de vue) est généralement plus susceptibles d'être "réutilisés" que n'importe quelle instruction SQL.
EDIT: j'ai eu tort, et vous devriez voir Les marques de la réponse ci-dessus.
Je ne peux pas parler de l'expérience avec SQL Server, mais pour la plupart des bases de données de la réponse serait non. Les seuls avantages que vous obtenez, la performance sage, à partir d'un point de vue est qu'il pourrait potentiellement créer des chemins d'accès basé sur la requête. Mais la principale raison de l'utilisation d'un point de vue est de simplifier une requête ou à normaliser un moyen d'accès à certaines données dans une table. En règle générale, vous ne serez pas obtenir un avantage de performance. J'ai peut-être tort, bien que.
Je voudrais venir avec un modérément exemple plus compliqué et le temps vous-même pour voir.
Il peut être plus rapide si vous créez une vue matérialisée (avec la liaison de schéma). Non vues matérialisées exécuter des requêtes.
Ma compréhension est que tout à l'arrière, d'un point de vue sera plus rapide parce que SQL Server est possible de mémoriser un plan d'exécution et puis il suffit de l'utiliser au lieu d'essayer de comprendre l'un à la volée. Je pense que les gains de performance d'aujourd'hui est probablement pas aussi grande qu'elle l'était autrefois, mais il faudrait que je pense qu'il y aurait une amélioration marginale d'utilisation de la vue.
Certainement un point de vue est meilleur qu'une requête imbriquée pour SQL Server. Sans savoir exactement pourquoi il est le meilleur (jusqu'à ce que j'ai lu Marque Brittingham du post), j'ai dû faire quelques tests et expérimentés presque choquant améliorations de performances lors de l'utilisation d'un point de vue par rapport à une requête imbriquée. Après l'exécution de chaque version de la requête à plusieurs centaines de fois dans une rangée, la vue de la version de la requête terminée dans la moitié du temps. Je dirais que c'est une preuve suffisante pour moi.
Je m'attends à ce que les deux requêtes à effectuer de la même manière. Une vue est rien de plus qu'une requête stockée définition, il n'y a pas de mise en cache ou de stockage de données pour une vue. L'optimiseur va effectivement tourner votre première requête dans votre deuxième requête lorsque vous l'exécutez.
Tout dépend de la situation. MS SQL vues Indexées sont plus rapides que la normale de la vue ou de la requête, mais les vues indexées peuvent pas être utilisés dans une base de données en miroir invironment (MS SQL).
Vue dans tout genre d'une boucle va causer de sérieux ralentissement, parce que la vue est rempli de nouveau chaque fois qu'elle est appelée dans la boucle. Même en tant que requête. Dans cette situation, une table temporaire à l'aide # ou @ pour la conservation de vos données de boucle est plus rapide qu'une vue ou une requête.
Donc, tout dépend de la situation.
Il n'y a pas de pratiques différentes et si vous lisez BOL, vous trouverez que jamais votre bon vieux SQL SELECT * from X n'profiter de plan de mise en cache etc.
Il devrait y avoir quelques trivial gain en avoir le plan d'exécution stockée, mais il sera négligeable.
Le but d'un point de vue est d'utiliser la requête maintes et maintes fois. À cette fin, SQL Server, Oracle, etc. procure généralement un "cache" ou "compilé" la version de votre point de vue, et ainsi d'améliorer ses performances. En général, cela devrait mieux fonctionner que d'un "simple" de la requête, bien que, si la requête est vraiment très simple, les bénéfices peuvent être négligeable.
Maintenant, si vous êtes en train de faire une requête complexe, créer la vue.
Dans ma conclusion, à l'aide de la vue est un peu plus rapide que la normale de la requête. Mon procédure stockée a été prise à environ 25 minutes (avec un autre de plus grands ensembles d'enregistrements et de plusieurs jointures) et après l'utilisation de la vue (non-cluster), la performance était juste un peu plus rapide mais pas de manière significative à tous. J'ai dû utiliser une autre requête des techniques d'optimisation/méthode pour faire un changement spectaculaire.
Sélectionner à partir d'une Vue ou d'une table ne sera pas trop de sens.
Bien sûr, si la Vue ne doit pas les jointures inutiles, les champs, etc. Vous pouvez consulter le plan d'exécution de requêtes, jointures et les index utilisés pour améliorer les performances d'Affichage.
Vous pouvez même créer des index sur les points de vue pour une recherche plus rapide des exigences. http://technet.microsoft.com/en-us/library/cc917715.aspx
Mais si vous êtes à la recherche like '% ... % " que le moteur sql ne bénéficiera pas d'un index sur la colonne de texte. Si vous pouvez forcer les utilisateurs à faire des recherches comme "... % ' que ça sera rapide
visée à répondre sur asp forums :
https://forums.asp.net/t/1697933.aspx?Which+est+rapide+quand+aide+SELECT+requête de+VUE+ou+Table+