特定の範囲のレコードのセットを提供するストアド プロシージャを 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)
最適化する方法を教えてください。