Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A consulta em visualizações é mais lenta do que uma consulta?


Embora em seu exemplo simples as coisas sejam as mesmas, é necessário ter cuidado ao usar visualizações aninhadas.

Trabalhei em um sistema em que as consultas expiravam após 30 segundos construídas em cerca de 6 níveis de visualizações aninhadas e consegui acelerá-las por um fator de cerca de 100 reescrevendo as consultas nas tabelas base.

Um exemplo simples do tipo de problema que pode surgir está abaixo.
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.
*/