Sql查询在给定范围之间获取记录

时间:2013-09-17 07:14:36

标签: sql sql-server

我编写了一个存储过程,它为给定范围提供了一组记录(例如,如果我给出索引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) 

您能否告诉我如何优化它。

0 个答案:

没有答案