(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo crear y usar Indexed Views en SQL Server: paso a paso

João Barros 25 de September de 2026 4 min de lectura

Se explica cómo crear y usar Indexed Views en SQL Server para acelerar consultas con agregaciones y unir datos precalculados. Esta técnica es útil en escenarios de lectura intensiva en los que reducir el coste de CPU y I/O mejora la capacidad de respuesta de las consultas.

Requisitos previos

  • SQL Server (recomendado 2016+) con permisos para crear índices y views.
  • SQL Server Management Studio (SSMS) u otra interfaz T-SQL.
  • Conocimientos básicos de T-SQL: CREATE VIEW, CREATE INDEX, SELECT.

Paso 1: Entender cuándo usar Indexed Views

Las Indexed Views almacenan los resultados de una view materializada con un índice clusterizado. Son útiles para consultas con agregaciones o uniones repetidas, reduciendo el tiempo de ejecución. No son adecuadas cuando hay muchas escrituras en la base de datos porque el coste de mantenimiento del índice aumenta.

Paso 2: Crear una tabla de ejemplo

Empieza por crear una tabla simple de ventas. El ejemplo es mínimo y funcional para probar Indexed Views.

CREATE TABLE Sales (
    SalesID INT IDENTITY PRIMARY KEY,
    ProductID INT NOT NULL,
    SaleDate DATE NOT NULL,
    Quantity INT NOT NULL,
    Amount DECIMAL(10,2) NOT NULL
);

-- Inserir alguns dados de teste
INSERT INTO Sales (ProductID, SaleDate, Quantity, Amount)
VALUES
(1, '2026-01-01', 2, 19.98),
(1, '2026-01-02', 1, 9.99),
(2, '2026-01-01', 5, 49.95);

Paso 3: Reglas y limitaciones a conocer

Antes de crear la Indexed View, cumple reglas: la view debe ser schemabound, no puede usar funciones no determinísticas ni OUTER JOIN, y todas las columnas referidas deben ser determinísticas. El índice clusterizado exige que la view sea materializada.

Paso 4: Crear la view con SCHEMABINDING

La vista debe usar WITH SCHEMABINDING para evitar cambios en las tablas subyacentes que invaliden la view.

CREATE VIEW dbo.vw_SalesByProduct
WITH SCHEMABINDING
AS
SELECT
    ProductID,
    COUNT_BIG(*) AS SalesCount,
    SUM(Quantity) AS TotalQuantity,
    SUM(Amount) AS TotalAmount
FROM dbo.Sales
GROUP BY ProductID;

Paso 5: Crear el índice clusterizado en la view (materializar)

Tras crear la view, materialízala con un índice clusterizado. El indexado convierte la vista en física y acelera las consultas que la utilicen.

CREATE UNIQUE CLUSTERED INDEX IX_vw_SalesByProduct_ProductID
ON dbo.vw_SalesByProduct (ProductID);

Paso 6: Consultar usando la Indexed View

Ejecuta consultas que se beneficien del índice. El Query Optimizer puede usar automáticamente la view materializada incluso si la consulta lee solo la tabla base, pero es posible forzar su uso con la hint NOEXPAND en ediciones Standard/Enterprise según sea necesario.

-- Consulta que usa la view directamente
SELECT ProductID, TotalQuantity, TotalAmount
FROM dbo.vw_SalesByProduct
WHERE ProductID = 1;

-- Forçar uso da view (em edições onde aplica)
SELECT ProductID, TotalQuantity
FROM dbo.vw_SalesByProduct WITH (NOEXPAND)
WHERE ProductID = 1;

Paso 7: Gestionar mantenimiento y actualizaciones

Cuando insertes, actualices o borres filas en la tabla Sales, SQL Server actualiza automáticamente la Indexed View. Este coste adicional debe monitorizarse. Para cargas de escritura intensivas, considera alternativas como ETL periódico para tablas agregadas.

-- Exemplo de inserção que actualiza a Indexed View automaticamente
INSERT INTO Sales (ProductID, SaleDate, Quantity, Amount)
VALUES (1, GETDATE(), 3, 29.97);

Verificar el resultado

Confirma que la view está materializada y se está utilizando: verifica la existencia del índice y analiza planes de ejecución. Usa sys.indexes y el plan estimado/ejecutado en SSMS.

-- Verificar índice na view
SELECT object_name(object_id) AS ObjectName, name AS IndexName, type_desc
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.vw_SalesByProduct');

-- Obter plano estimado no SSMS para ver se usa a view/index
-- (Use a opção "Display Estimated Execution Plan")

Conclusión

Las Indexed Views en SQL Server son una solución práctica para acelerar consultas agregadas y repetitivas, especialmente en escenarios de lectura intensiva. Prueba con datos reales, monitoriza el coste de mantenimiento en escenarios de escritura y considera índices adicionales o ETL si la carga de escritura es elevada. Consejo: prueba con y sin WITH (NOEXPAND) para entender el impacto en el plan — ¿cuál es el resultado en tus pruebas?