La Vista Indexada (Indexed View, vista materializada con índice) es una vista (VIEW) para la cual se ha creado un índice único agrupado. Esto permite almacenar físicamente los resultados de la consulta en disco y utilizar el índice para acelerar el acceso.
Ventajas:
Limitaciones:
TEXT, NTEXT, IMAGE, algunas funciones).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);
P: ¿Todas las vistas permiten crear un índice (agrupado) sobre ellas?
R: No, solo se pueden indexar aquellas VIEW que cumplen completamente con las restricciones (por ejemplo, no debe haber referencias externas, funciones agregadas coherentes, etc.). De lo contrario, la consulta para crear el índice generará un error.
Historia
En un proyecto real en un sistema bancario se necesitaba acelerar las consultas sobre informes agregados. Se creó una VIEW indexada sin analizar la carga de las actualizaciones de las tablas. Durante operaciones masivas de inserción, el rendimiento de la tabla principal se desplomó debido a los altos costos de actualización del índice de la vista.
Historia
Un especialista supuso erróneamente que se podía indexar una VIEW con un JOIN especificado a una tabla externa y la función GETDATE(). La consulta para crear el índice terminó con el error "No se puede crear un índice en una vista con funciones no deterministas". Se desperdició un día corrigiendo la arquitectura del proyecto.
Historia
En un gran proyecto de e-commerce, la actualización de datos en la tabla base "Products" causó bloqueos. La razón fue una gestión incorrecta de las transacciones en presencia de una gran VIEW indexada, donde la agregación afectaba a millones de filas.