sql server vista indicizzata
-
04-10-2019 - |
Domanda
OK, sono confuso su una vista SQL Server indicizzato (con 2008)
Ho una vista indicizzata chiamato
AssignmentDetail
quando guardo il piano di esecuzione per la
select * from AssignmentDetail
mostra il piano di esecuzione di tutti gli indici sottostanti tutte le altre tabelle che la vista indicizzata dovrebbe via astratta.
Vorrei pensare che il piano di esecuzione woul essere semplicemente un indice di scansione cluster di PK_AssignmentDetail (il nome dell'indice cluster per il mio punto di vista), ma non è così.
Sembra che ci sia alcun guadagno di prestazioni con questa vista indicizzata cosa dovrei fare? Dovrei anche io creare un indice non cluster con tutte le colonne in modo che non ha bisogno di colpire tutti gli altri indici?
Tutta la comprensione sarebbe molto apprezzato
Soluzione
La versione Enterprise di SQL Server è abbastanza intelligente per cercare e fare uso di viste indicizzate quando esistono. Tuttavia, se non si esegue Enterprise Edition, avrete bisogno di dire esplicitamente di utilizzare la vista indicizzata, in questo modo:
select *
from AssignmentDetail WITH (NOEXPAND)
Altri suggerimenti
Il punto di una vista indicizzata non è accelerare
SELECT * FROM MyView
La cosa che vi aiuterà a migliorare le prestazioni è un indice su una colonna della vista stessa, come ad esempio.
SELECT * FROM MyView WHERE ViewColumnA = 'A' and ViewColumnB = 'B'
Si può quindi avere un indice su ViewColumnA e ViewColumnB che potrebbe realmente esistere su tavoli diversi.