Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Заявките за изгледи по-бавно ли са от извършването на една заявка?

Въпреки че във вашия прост пример нещата ще бъдат същите, необходимо е известно внимание при използването на вложени изгледи.

Работих върху система, в която заявките изтичаха след 30 секунди, изградена на около 6 нива на вложени изгледи, и успях да ги ускоря с коефициент около 100 чрез пренаписване на заявките спрямо базовите таблици.

Един прост пример за типа проблем, който може да възникне, е по-долу.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изведа само една максимална стойност от тази заявка в SQL?

  2. Entity Framework EF4.1 - съхранената процедура не може да бъде намерена в контейнера

  3. Комбинирайте две таблици, които нямат общи полета

  4. Вземете последната дата преди стойността на датата в реда

  5. SQL Server bcp Utility и числовият тип данни