Vistas indexadas – Sql Server 2008
CREATE TABLE [dbo].[Productores](
[Id_Productor] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](100) NOT NULL,
[Descripcion] [varchar](8000) NOT NULL,
[Id_Pais] [int] NULL)
CREATE TABLE [dbo].[Paises](
[Id_Pais] [int] IDENTITY(1,1) NOT NULL,
[Pais] [varchar](50) NOT NULL)
— SET STATISTICS IO ON Hace que SQL Server muestre información relacionada
— con la cantidad de actividad de disco generada por las instrucciones Transact-SQL.
SET STATISTICS IO ON
— Insertamos registros en Productores
INSERT INTO DBO.Productores (Nombre,Descripcion,Id_Pais) VALUES (‘Alquimia’,’Productora peruana Alquimia’,1)
INSERT INTO DBO.Productores (Nombre,Descripcion,Id_Pais) VALUES (‘Araba Films’,’Productora peruana Araba Films’,1)
INSERT INTO DBO.Productores (Nombre,Descripcion,Id_Pais) VALUES (‘Atlántico Films S.L.’,’Productora española Atlántico Films S.L.’,2)
— Insertamos registros en Paises
INSERT INTO DBO.Paises (Pais) VALUES (‘Perú’)
INSERT INTO DBO.Paises (Pais) VALUES (‘España’)
SELECT dbo.Paises.Id_Pais, dbo.Paises.Pais, COUNT_BIG(*) AS NumeroProductores
FROM dbo.Productores INNER JOIN
dbo.Paises ON dbo.Productores.Id_Pais = dbo.Paises.Id_Pais
GROUP BY dbo.Paises.Id_Pais, dbo.Paises.Pais
— Creando una vista indexada
CREATE VIEW DBO.NumerodeProductores
WITH SCHEMABINDING
AS
SELECT dbo.Paises.Id_Pais, dbo.Paises.Pais, COUNT_BIG(*) AS NumeroProductores
FROM dbo.Productores INNER JOIN
dbo.Paises ON dbo.Productores.Id_Pais = dbo.Paises.Id_Pais
GROUP BY dbo.Paises.Id_Pais, dbo.Paises.Pais
GO
— Creamos el indice sobre la vista
CREATE UNIQUE CLUSTERED INDEX Id_Pais ON
DBO.NumerodeProductores(Id_Pais)
— Mostramos la vista
SELECT * FROM DBO.NumerodeProductores
— Eliminamos las tablas y la vista creada
DROP TABLE DBO.Productores
DROP TABLE DBO.Paises
DROP VIEW DBO.NumerodeProductores
Fuente: rahsuarez