1

特定の範囲のレコードのセットを提供するストアド プロシージャを 1 つ作成しました (たとえば、開始インデックス 100 を指定し、ページ サイズが 50 の場合、特定の開始インデックスから 50 レコードを返します)。私のテーブル レコードはより多い (約 14 不足) ため、クエリの実行には約 13 秒かかります。最適化したい。

ここに私の質問があります-

SELECT  * FROM 
(           
  SELECT ROW_NUMBER() OVER( ORDER BY FE.CreatedDate DESC ) RowNumber,
      FE.FileEventId, MIN(FS.FolderSettingName) AS FolderSettingName,
      MIN(SD.StatusDescription) AS StatusDescription,
      MIN (@TotalRecords) as  RecordCount
  FROM FileEvent FE with (nolock)
  INNER JOIN  FolderSetting FS with (nolock) ON
                            FE.FolderSettingId = FS.FolderSettingId
  INNER JOIN  [Status] SD with (nolock) ON SD.StatusId = FE.StatusId
  WHERE FolderSettingName LIKE
                   ISNULL('%' + @FolderSettingName + '%' , FolderSettingName)
  AND FilePath LIKE ISNULL('%' + @FileName + '%' , FilePath)
  AND (@EventType IS NULL OR (ISNULL(FE.EventType, '') IN (SELECT * FROM
                       dbo.UFN_StringSplitByCommaSeparator(@EventType))))
  AND (@EventStatus IS NULL OR (ISNULL(SD.StatusDescription, '') IN
              (SELECT * FROM dbo.UFN_StringSplitByCommaSeparator(@EventStatus))))
  AND FE.ModifiedBy LIKE ISNULL('%' + @ProcessedBy + '%' , FE.ModifiedBy)
  AND FE.ModifiedDate BETWEEN @FileProcessedFromDate AND @FileProcessedToDate
  AND @LockByMachine IS NULL OR FE.LockedByMachine LIKE 
                               ISNULL('%' + @LockByMachine + '%' , 1)
  GROUP BY FileEventId, FE.CreatedDate
) FEvent
INNER JOIN  FileEvent with (nolock) ON FileEvent.FileEventId = FEvent.FileEventId
WHERE FEvent.RowNumber BETWEEN @StartIndex AND (@StartIndex + @PageSize) 

最適化する方法を教えてください。

4

0 に答える 0