Оптимизация SQL Запрос или архив большой таблицы - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь оптимизировать мой SQL Запрос, потому что для его выполнения требуется 12-15 секунд, и он покажет только 3 строки.

Это мой запрос:

SELECT DISTINCT 
    [bs].[id] AS 'id'
  , [pt].[parenttask] AS 'parent'
  , [ct].[childtaskname] AS 'child'
  , [tc].[TaskCategoryName] AS 'taskCat'
  , [bs].[volume] AS 'volume'
  , FORMAT([bs].[startTime], 'hh:mm:ss tt') AS 'startTime'
  , FORMAT([bs].[endtime], 'hh:mm:ss tt') AS 'endTime'
  , [bs].[ReportingDate] AS 'reportDate'
  , [ts].[taskstatusname] AS 'taskStatus'
  , [bs].[TotalTAT] AS 'tat'
  , [ta].[TaskOwnerWorkdayID] 'workdayId'
  , [pt].[teamID] 'teamId'
  , [ts].[id] 'tasksStat'
FROM [tbl_DiloBillableServices] [bs] WITH(NOLOCK)
INNER JOIN [tbl_taskallocation] [ta] WITH(NOLOCK)
     ON [ta].[ID] = [bs].[TaskAllocationID]
INNER JOIN [tbl_sostasks] [pt] WITH(NOLOCK)
     ON [pt].[id] = [ta].[parenttaskID]
INNER JOIN [tbl_soschildtasks] [ct] WITH(NOLOCK)
     ON [ct].[id] = [ta].[ChildtaskID]
INNER JOIN [tbl_taskcategory] [tc] WITH(NOLOCK)
     ON [tc].[id] = [ta].[TaskCategoryID]
INNER JOIN [tbl_tasksstatus] [ts] WITH(NOLOCK)
     ON [ts].[id] = [bs].[taskstatusID]
WHERE [ta].[taskownerworkdayid] = 388537
      AND [bs].[reportingdate] = '2/13/2020'
      AND [pt].[teamID] = 68
      AND [bs].[taskstatusID] <> 5;

Это весь список таблиц, которые я использовал выше:

SELECT * FROM tbl_DiloBillableServices 

Время выполнения: 6 с. Записи: 300000 +

SELECT * FROM tbl_taskallocation 

Запуск время: 3с Записи: 170000 +

SELECT * FROM tbl_sostasks

Продолжительность: 0 записей: 10000 +

SELECT * FROM tbl_soschildtasks

Продолжительность: 0 записей : 10000 +

SELECT * FROM tbl_taskcategory

Продолжительность: 0 записей: 5 +

SELECT * FROM tbl_tasksstatus

Продолжительность: 0 записей: 5 +

Есть ли способы оптимизировать этот запрос выше? или я должен заархивировать 2 таблицы выше с самыми старыми данными?

Если в этом случае я должен заархивировать данные, какой лучший способ сделать это?

1 Ответ

1 голос
/ 13 февраля 2020

Вы пропустите индексы. Добавление индекса в tbl_taskallocation (taskownerworkdayid) значительно повысит производительность. Индекс на tbl_DiloBillableServices также поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...