Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist das Abfragen von Aufrufen langsamer als das Ausführen einer Abfrage?

Während in Ihrem einfachen Beispiel die Dinge gleich bleiben, ist bei der Verwendung von verschachtelten Ansichten etwas Vorsicht geboten.

Ich habe an einem System gearbeitet, bei dem Abfragen nach 30 Sekunden abgelaufen sind und auf etwa 6 Ebenen verschachtelter Ansichten aufgebaut sind, und es geschafft, diese um einen Faktor von etwa 100 zu beschleunigen, indem ich die Abfragen gegen die Basistabellen neu geschrieben habe.

Nachfolgend finden Sie ein einfaches Beispiel für die Art von Problemen, die auftreten können.

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