Una vista indicizzata (Indexed View, vista materializzata con indice) è una vista (VIEW) per la quale è stato creato un indice unico cluster. Questo consente di memorizzare fisicamente i risultati della query su disco e di utilizzare l'indice per accelerare l'accesso.
Vantaggi:
Limitazioni:
TEXT, NTEXT, IMAGE, alcune funzioni).CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);
D: Tutte le viste consentono di creare un indice (cluster)?
R: No, è possibile indicizzare solo quelle VIEW che soddisfano completamente le limitazioni (ad esempio, nessun riferimento esterno, funzioni aggregate concordate, ecc.). In caso contrario, la query di creazione dell'indice restituirà un errore.
Storia
In un progetto reale in un sistema bancario era necessario accelerare le selezioni sui report aggregati. È stata creata una vista indicizzata senza analizzare il carico sulle tabelle di aggiornamento. Durante operazioni di inserimento massivo, le prestazioni della tabella principale sono crollate a causa dei significativi costi di aggiornamento dell'indice della vista.
Storia
Un esperto ha erroneamente pensato che fosse possibile indicizzare una VIEW con un JOIN specificato su una tabella esterna e la funzione GETDATE(). La query di creazione dell'indice è terminata con l'errore "Impossibile creare un indice su una vista con funzioni non deterministiche". È stata spesa una giornata per correggere l'architettura del progetto.
Storia
In un grande progetto di e-commerce, l'aggiornamento dei dati nella tabella di base "Products" ha causato problemi di blocco. La causa è stata una gestione errata delle transazioni in presenza di una grande vista indicizzata, in cui l'aggregazione interessava milioni di righe.