sql >> Databáze >  >> RDS >> Sqlserver

Je dotazování na zobrazení pomalejší než provádění jednoho dotazu?

Zatímco ve vašem jednoduchém příkladu budou věci stejné, při používání vnořených pohledů je nutná určitá opatrnost.

Pracoval jsem na systému, kde dotazy vypršely po 30 sekundách, postaveném na asi 6 úrovních vnořených pohledů, a podařilo se mi je urychlit asi stonásobně přepsáním dotazů proti základním tabulkám.

Jednoduchý příklad typu problému, který může nastat, je uveden níže.

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.
*/



  1. Prostorový dotaz na velké tabulce s vícenásobnými vlastními spojeními je pomalý

  2. Propojení Excelu s PostgreSQL přes VBA

  3. Nejlepší výkon MySQL DigitalOcean – ScaleGrid vs. DigitalOcean Managed Databases

  4. Jak používat dynamické názvy sloupců v příkazu UPDATE nebo SELECT ve funkci?