Как я могу оптимизировать этот запрос
Я пытаюсь оптимизировать этот запрос так как он является тяжелым ресурсоемким в БД
Что я уже пробовал:
INSERT @UserNotes SELECT pn.pkfkGroupCode, pn.pkfkGroupDivisionCode, pn.pkfkDivisionMasterPolicyID, '', pn.pkfkPolicyNumber, pn.pkPolicyNotesID, CASE WHEN LEN(LTRIM(RTRIM(Note))) > 20 THEN LEFT(Note,17) + '...' ELSE LTRIM(RTRIM(Note)) END AS 'NoteHeader', LTRIM(RTRIM(ISNULL(pn.Note,''))), CASE WHEN ISNULL(ActionFlag,'') = 'I' THEN 'Incomplete' WHEN ISNULL(ActionFlag,'') = 'T' THEN 'To Follow Up' WHEN ISNULL(ActionFlag,'') = 'C' THEN 'Complete' WHEN ISNULL(ActionFlag,'') = 'U' THEN 'Unassigned' END AS 'Status', CONVERT(char(10),CaptureDate,111) AS 'CaptureDate', ISNULL(CONVERT(char(10),ActionDate,111),'') AS 'ActionDate', ISNULL(CONVERT(char(7),ActionDate,111),'') AS 'DueMonth', pn.fkUserID AS 'AssignedBy', '', ISNULL(AssignedTo,0) AS 'AssignedTo', '' FROM PolicyNotes pn WITH (NOLOCK) WHERE ( pn.fkUserID = CAST(@UserID as varchar(255)) OR ISNULL(pn.AssignedTo,0) = @UserID OR ( ISNULL(@PolicyID,0) <> 0 AND ISNULL(pn.AssignedTo,'0') <> CAST(@UserID as varchar(255)) AND ISNULL(fkUserID,'0') <> CAST(@UserID as varchar(255)) AND ISNULL(ActionFlag,'') <> '' AND ActionDate IS NOT NULL ) OR ( ISNULL(pn.AssignedTo,0) = 0 AND ISNULL(ActionFlag,'') = 'U' AND ActionDate IS NOT NULL AND fkUserID IN ( SELECT CAST(fkUserID as varchar(255)) FROM SystemControl_Live.dbo.aa_UserTaskGroup WHERE fkTaskGroupID IN ( SELECT fkTaskGroupID FROM SystemControl_Live.dbo.aa_UserTaskGroup WHERE fkUserID = @UserID ) ) ) ) AND ISNULL(UPPER(LTRIM(RTRIM(pn.ActionFlag))),'N') NOT IN ('N','') AND LTRIM(RTRIM(ISNULL(Note,''))) <> '' AND (@GroupCode IS NULL OR pn.pkfkGroupCode = @GroupCode) AND (@GroupDivisionCode IS NULL OR pn.pkfkGroupDivisionCode = @GroupDivisionCode) AND (@DivisionMasterPolicyID IS NULL OR pn.pkfkDivisionMasterPolicyID = @DivisionMasterPolicyID) AND (@PolicyNumber IS NULL OR pn.pkfkPolicyNumber = @PolicyNumber) --Donovan -- remove completed items from list AND isnull(pn.ActionFlag,'') <> 'C' ORDER BY ISNULL(ActionDate,'') ASC, pkfkPolicyNumber, CaptureDate
ZurdoDev
Убедитесь, что у вас есть соответствующие индексы. Попробуйте удалить функции where WHERE предложение, если это возможно. SQL обычно не может использовать индекс для поля, если оно обернуто в функцию. Сузьте круг, если есть 1 или 2 конкретных вещи, которые замедляют его. Сначала посмотрите на сброс некоторых результатов во временную таблицу, а не на многоуровневые выборки.
Другими словами, начните пробовать много вещей.
Maciej Los
Какая версия sql server?