vue indexée du serveur sql
-
04-10-2019 - |
Question
OK, je suis confus au sujet des vues indexées serveur sql (avec 2008)
J'ai une vue indexée appelé
AssignmentDetail
quand je regarde le plan d'exécution pour
select * from AssignmentDetail
il montre le plan d'exécution de tous les indices sous-jacents de toutes les autres tables que la vue indexée est censé loin abstrait.
Je pense que le plan d'exécution woul être simplement une analyse d'index ordonné en clusters de PK_AssignmentDetail (le nom de l'index ordonné en clusters pour moi) mais il ne fonctionne pas.
Il ne semble pas gain de performance avec ce point de vue indexée que dois-je faire? Dois-je créer également un index non ordonnés en clusters avec toutes les colonnes de sorte qu'il n'a pas de frapper tous les autres indices?
Toute idée serait grandement apprécié
La solution
L'édition Enterprise de SQL Server est assez intelligent pour voir et faire usage de vues indexées lorsqu'ils existent. Toutefois, si vous n'êtes pas en cours d'exécution Enterprise Edition, vous devrez indiquer explicitement d'utiliser la vue indexée, comme ceci:
select *
from AssignmentDetail WITH (NOEXPAND)
Autres conseils
Le point d'une vue indexée est de ne pas accélérer
SELECT * FROM MyView
La chose qu'il vous aidera à augmenter la performance est un index sur une colonne de la vue elle-même, par exemple.
SELECT * FROM MyView WHERE ViewColumnA = 'A' and ViewColumnB = 'B'
Vous pouvez donc avoir un index sur ViewColumnA et ViewColumnB qui pourrait réellement exister sur des tables différentes.