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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top