ProgramaciónDesarrollador Backend

¿Qué es una Vista Indexada (Indexed View) en SQL, cómo se implementa, para qué se utiliza y cuáles son las desventajas de su uso?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

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:

  • Recuperación rápida de datos agregados o frecuentemente utilizados.
  • Reduce la carga de cálculos en tiempo real.

Limitaciones:

  • No se admiten todos los tipos de consultas (por ejemplo, no se pueden usar tipos de datos TEXT, NTEXT, IMAGE, algunas funciones).
  • Costos adicionales para mantener el índice cuando hay cambios en la tabla base.
  • Requiere cumplir un conjunto de reglas estrictas al declarar.

Ejemplo de código

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);

Pregunta trampa.

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.

Ejemplos de errores reales debido al desconocimiento de los matices del tema.


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.