Оптимизация запроса из нескольких подзапросов

Сперва был такой запрос, всем устраивал:

SELECT [Firma].[Name]
, COUNT (DISTINCT (CASE WHEN [Case].[ReactOv] = 1 AND [Case].[Status] IN ('250') THEN [Case].[ID] END)) AS [Время выходит]
, COUNT (DISTINCT (CASE WHEN [Case].[ResolOv] = 1 AND [Case].[Status] IN ('270') THEN [Case].[ID] END)) AS [Время вышло]
FROM [Firma], [User], [CaseEx], [Case], [CaseEsc], [ServiceEsc]
WHERE [Firma].[ID] = [User].[FirmaID]
AND [User].[ID] = [CaseEx].[UserID] 
AND [CaseEx].[CaseID] = [Case].[ID]
AND [Case].[ID] = [CaseEsc].[CaseID]
AND [CaseEsc].[ServiceEscID] = [ServiceEsc].[ID]
AND [Firma].[ID] LIKE '15'
GROUP BY [Firma].[Name]
ORDER BY [Firma].[Name]

Потом решили сделать еще один:

SELECT [Firma].[Name]
, COUNT (DISTINCT (CASE WHEN [Case].[Status] IN ('250') THEN [Case].[ID] END)) AS [250]
, COUNT (DISTINCT (CASE WHEN [Case].[Status] IN ('270') THEN [Case].[ID] END)) AS [270]
, COUNT (DISTINCT (CASE WHEN [Case].[Status] IN ('260') THEN [Case].[ID] END)) AS [260]
FROM [Firma], [User], [CaseEx], [Case]
WHERE [Firma].[ID] = [User].[FirmaID]
AND [User].[ID] = [CaseEx].[UserID] 
AND [CaseEx].[CaseID] = [Case].[ID]
AND [Firma].[ID] LIKE '15'
GROUP BY [Firma].[Name]
ORDER BY [Firma].[Name]

Ну и появилась необходимость их объединить:

SELECT [Firma].[Name]
, COUNT (DISTINCT (CASE WHEN [Case].[Status] IN ('250') THEN [Case].[ID] END)) AS [250]
, COUNT (DISTINCT (CASE WHEN [Case].[Status] IN ('270') THEN [Case].[ID] END)) AS [270]
, COUNT (DISTINCT (CASE WHEN [Case].[Status] IN ('260') THEN [Case].[ID] END)) AS [260]
, COUNT (DISTINCT (CASE WHEN [Case].[ReactOv] = 1 AND [Case].[ID] = [CaseEsc].[CaseID]
AND [CaseEsc].[ServiceEscID] = [ServiceEsc].[ID] AND [Case].[Status] IN ('250') THEN [Case].[ID] END)) AS [Время выходит]
, COUNT (DISTINCT (CASE WHEN [Case].[ResolOv] = 1 AND [Case].[ID] = [CaseEsc].[CaseID]
AND [CaseEsc].[ServiceEscID] = [ServiceEsc].[ID] AND [Case].[Status] IN ('270') THEN [Case].[ID] END)) AS [Время вышло]
FROM [Firma], [User], [CaseEx], [Case], [CaseEsc], [ServiceEsc]
WHERE [Firma].[ID] = [User].[FirmaID]
AND [User].[ID] = [CaseEx].[UserID] 
AND [CaseEx].[CaseID] = [Case].[ID]
AND [Firma].[ID] LIKE '15'
GROUP BY [Firma].[Name]
ORDER BY [Firma].[Name]

Но возникла проблема, что такая солянка потребляет много ресурсов, как лучше оптимизировать и сократить время выполнения запроса?


Ответы (0 шт):