sql >> Base de Datos >  >> RDS >> Sqlserver

¿Consultar vistas es más lento que hacer una consulta?

Si bien en su ejemplo simple, las cosas serán iguales, es necesario tener cierta precaución al usar vistas anidadas.

Trabajé en un sistema en el que las consultas caducaban después de 30 segundos y se basaron en aproximadamente 6 niveles de vistas anidadas y logré acelerarlas en un factor de aproximadamente 100 reescribiendo las consultas en las tablas base.

A continuación se muestra un ejemplo sencillo del tipo de problema que puede surgir.

CREATE VIEW MaxTypes
AS
SELECT
  [number],
  MAX(type) AS MaxType
  FROM [master].[dbo].[spt_values]
GROUP BY [number]

GO

CREATE VIEW MinTypes
AS
SELECT
  [number],
  MIN(type) AS MinType
  FROM [master].[dbo].[spt_values]
GROUP BY [number]

GO
SET STATISTICS IO ON

SELECT     MaxTypes.number, MinTypes.MinType, MaxTypes.MaxType
FROM         MinTypes INNER JOIN
                      MaxTypes ON MinTypes.number = MaxTypes.number
ORDER BY MaxTypes.number

/*
Gives

Table 'spt_values'. Scan count 2, logical reads 16, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
*/
GO

SELECT 
  [number],
  MAX(type) AS MaxType,
  MIN(type) AS MinType
  FROM [master].[dbo].[spt_values]
GROUP BY [number]
ORDER BY  [number]

/*
Gives

Table 'spt_values'. Scan count 1, logical reads 8, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
*/