sql >> Database >  >> RDS >> Sqlserver

Is het uitvoeren van query's op weergaven langzamer dan het uitvoeren van één query?

Hoewel in uw eenvoudige voorbeeld de dingen hetzelfde zullen zijn, is enige voorzichtigheid geboden bij het gebruik van geneste weergaven.

Ik werkte aan een systeem waarbij query's na 30 seconden een time-out kregen, gebouwd op ongeveer 6 niveaus van geneste weergaven en slaagde erin deze met een factor 100 te versnellen door de query's te herschrijven tegen de basistabellen.

Hieronder vindt u een eenvoudig voorbeeld van het type probleem dat zich kan voordoen.

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. Perl DBI versnellen fetchrow_hashref

  2. Wat te doen (of niet te doen) over de beste wachtstatistieken

  3. Niet-gevangen uitzondering 'PDOException' met bericht 'Er is geen actieve transactie'?

  4. 2 Functies die de seconden retourneren van een Datetime-waarde in Oracle