Sì , alle viste può essere assegnato un indice cluster e, quando lo fanno, memorizzeranno i risultati temporanei che possono accelerare le query risultanti.
Aggiornamento: almeno tre persone mi hanno votato in questo senso. Con tutto il rispetto, penso che siano semplicemente sbagliati; La documentazione di Microsoft indica chiaramente che Views può migliorare le prestazioni.
In primo luogo, le viste semplici vengono espanse in atto e quindi non contribuiscono direttamente al miglioramento delle prestazioni - questo è vero. Tuttavia, le viste indicizzate possono migliorare notevolmente le prestazioni.
Lasciami andare direttamente alla documentazione:
Dopo aver creato un indice cluster univoco nella vista, il set di risultati della vista si materializza immediatamente e persiste nella memoria fisica nel database, risparmiando il sovraccarico di eseguire questa costosa operazione al momento dell'esecuzione.
In secondo luogo, queste viste indicizzate possono funzionare anche quando non sono direttamente referenziate da un'altra query poiché l'ottimizzatore le utilizzerà al posto di un riferimento di tabella quando appropriato.
Ancora una volta, la documentazione:
La vista indicizzata può essere utilizzata nell'esecuzione di una query in due modi. La query può fare riferimento direttamente alla vista indicizzata o, cosa ancora più importante, Query Optimizer può selezionare la vista se determina che la vista può essere sostituita per una parte o tutta la query nel piano di query più economico. Nel secondo caso, viene utilizzata la vista indicizzata al posto delle tabelle sottostanti e dei loro indici ordinari. Non è necessario fare riferimento alla vista nella query affinché Query Optimizer la utilizzi durante l'esecuzione della query. Ciò consente alle applicazioni esistenti di beneficiare delle viste indicizzate appena create senza modificarle.
Questa documentazione, nonché i grafici che dimostrano i miglioramenti delle prestazioni, sono disponibili qui .
Aggiornamento 2: la risposta è stata criticata sulla base del fatto che è l '"indice" che fornisce il vantaggio in termini di prestazioni, non la "Visualizzazione". Tuttavia, questo è facilmente confutato.
Diciamo che siamo una società di software in un piccolo paese; Userò la Lituania come esempio. Vendiamo software in tutto il mondo e conserviamo i nostri record in un database SQL Server. Abbiamo molto successo e quindi, tra qualche anno, abbiamo oltre 1.000.000 di dischi. Tuttavia, spesso dobbiamo segnalare le vendite a fini fiscali e scopriamo di aver venduto solo 100 copie del nostro software nel nostro paese di origine. Creando una vista indicizzata solo dei record lituani, riusciamo a conservare i record di cui abbiamo bisogno in una cache indicizzata come descritto nella documentazione di MS. Quando eseguiamo i nostri rapporti sulle vendite lituane nel 2008, la nostra query cercherà in un indice con una profondità di soli 7 (Log2 (100) con alcune foglie non utilizzate). Se dovessimo fare lo stesso senza la VISTA e basandoci solo su un indice nella tabella, dovremmo attraversare un albero indice con una profondità di ricerca di 21!
Chiaramente, la Vista stessa ci fornirebbe un vantaggio in termini di prestazioni (3x) rispetto al semplice utilizzo dell'indice da solo. Ho provato a usare un esempio del mondo reale, ma noterai che un semplice elenco di vendite lituane ci darebbe un vantaggio ancora maggiore.
Nota che sto solo usando un albero a b dritto per il mio esempio. Sebbene sia abbastanza certo che SQL Server utilizzi una variante di un b-tree, non conosco i dettagli. Tuttavia, il punto vale.
Aggiornamento 3: è emersa la questione se una vista indicizzata utilizza solo un indice posizionato nella tabella sottostante. Cioè, per parafrasare: "una vista indicizzata è solo l'equivalente di un indice standard e non offre nulla di nuovo o unico a una vista". Se questo fosse vero, ovviamente, l'analisi sopra sarebbe errata! Consentitemi di fornire un preventivo dalla documentazione Microsoft che dimostri perché penso che questa critica non sia valida o vera:
L'uso degli indici per migliorare le prestazioni delle query non è un nuovo concetto; tuttavia, le viste indicizzate offrono ulteriori vantaggi in termini di prestazioni che non possono essere raggiunti utilizzando gli indici standard.
Insieme alla citazione di cui sopra per quanto riguarda la persistenza dei dati nella memoria fisica e altre informazioni nella documentazione su come vengono creati gli indici su Views, penso che sia sicuro affermare che una vista indicizzata non è solo una selezione SQL memorizzata nella cache che utilizza un indice definito nella tabella principale. Pertanto, continuo a sostenere questa risposta.