Как сделать оптимизацию запросов. Для отображения текущей панели инструментов потребовалось более 3 минут - PullRequest
0 голосов
/ 31 мая 2019

Я улучшаю встроенную панель мониторинга, которая требует много времени для запроса.Однако я новичок в SSDT и понятия не имею, где мне искать.

Я пытался удалить графики, которые могли вызвать проблему, но не повезло.

IF OBJECT_ID('tempdb..#temp1') IS NOT NULL DROP TABLE #temp1

SELECT HD.Incident_Number,HDA.log,HDA.Assigned_To,HD.Entry_ID,

DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25)) AS MSC_submit_Date,
       CONCAT(FORMAT(DATEPART(hh, DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25))), '00'), ':', FORMAT(DATEPART(mi, DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25))), '00'), ':', FORMAT(DATEPART(ss, DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25))), '00')) AS Time

INTO #temp1
FROM HPD_Help_Desk HD LEFT OUTER JOIN 
                    -- HPD_WorkLog AS HPD_WL ON HPD_WL.Incident_Number = HD.Incident_Number LEFT OUTER JOIN
                    --reference.dbo.SAP_worker AS rsw ON HD.Internet_E_mail = LOWER(rsw.micron_username) + '@micron.com' LEFT OUTER JOIN
                    HPD_HelpDesk_AuditLogSystem AS HDA ON HD.Entry_ID = HDA.Original_Request_ID 
                    --SLM_Measurement AS SM ON HD.Incident_Number = SM.ApplicationUserFriendlyID  

WHERE 
(DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_date/ (60.0 * 60.0 * 24.0) - 0.25)) >= @Shift_start_time) 

NA

1 Ответ

1 голос
/ 09 июня 2019

Использование функций даты в предложении WHERE убивает использование индекса. В Интернете есть множество статей об этом. Вы можете легко погуглить для этого, ища SARG Например здесь .

Итак, чтобы ваш запрос работал быстрее, вам нужно выполнить следующие действия:

  • Создать индекс для HPD_HelpDesk_AuditLogSystem таблицы. Самым простым способом для вас может быть проверка плана объяснения для этого запроса, и SSMS, вероятно, предложит индекс, если он не существует
  • Сделать предикат в предложении WHERE SARGable. Трудно понять, в чем тут логика. Проще говоря, вам нужно переписать его так, чтобы все функции использовались для переменной @Shift_start_time.

Еще одна вещь: вы можете использовать INNER JOIN вместо LEFT OUTER, потому что вы используете столбец объединенной таблицы в качестве предиката.

...