Я пытаюсь оптимизировать мой 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 таблицы выше с самыми старыми данными?
Если в этом случае я должен заархивировать данные, какой лучший способ сделать это?