sql >> Database teknologi >  >> RDS >> Sqlserver

Er forespørgsel på visninger langsommere end at udføre én forespørgsel?

Mens tingene i dit simple eksempel vil være de samme, er der behov for en vis forsigtighed med at bruge indlejrede visninger.

Jeg arbejdede på et system, hvor forespørgsler var på timeout efter 30 sekunder bygget på omkring 6 niveauer af indlejrede visninger og formåede at fremskynde disse med en faktor på omkring 100 ved at omskrive forespørgslerne mod basistabellerne.

Et simpelt eksempel på den type problem, der kan opstå, er nedenfor.

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. ExecuteNonQuery returnerer -1 ved brug af sql COUNT på trods af forespørgselsstrengen

  2. Fejl ved indlæsning af MySQLdb-modul:libmysqlclient.so.20:kan ikke åbne delt objektfil:Ingen sådan fil eller mappe

  3. Parvis array sum aggregeret funktion?

  4. Sådan vælger du hver n'te række i mySQL fra n