SQL分页(偏移,提取)查询非常慢

时间:2019-06-10 17:49:22

标签: sql-server tsql

我不明白这里发生了什么。我正在查询一个表,如下面的查询所示。我只获取前20条记录,但查询需要24秒才能完成。

有什么方法可以加快此分页查询的速度吗?

;WITH TempResult AS(
     SELECT distinct


       D.GLCompany
      ,D.GLAcct
      ,D.GLProdNum
      ,D.GLCostCenter         
      ,D.FCSCompany
      ,D.FCSAcct
      ,D.FCSCostCenter     
      ,D.JournalDetailId
      ,D.[EffDt]
      ,D.[JournalLineAmt]
      ,D.[JournalLineDesc]     
      ,D.[ManagedByCd]
      ,D.[LegalOwnerId]
      ,D.[JournalLineNum]
      ,D.[RoundedFlagBit]
      ,D.[CLPreValErrCd]
      ,D.[GLPreValErrCd]
      ,D.[SuspenseErrCd]
      ,D.GLProfitCenter
      ,D.GLTradingPartner
      ,D.GLInternalOrder
      ,D.GLSubAcct
      ,D.GLAcctActivity
      ,D.GLDataSrc
      ,D.GLId
      ,D.GLProdGrp 
      ,D.HeaderId   
     from MyDetail  D
 )


    SELECT *  FROM TempResult
 ORDER BY  TempResult.HeaderId
  OFFSET 0  ROWS
 FETCH NEXT 20 ROWS ONLY
 OPTION(RECOMPILE)

headerid上有一个非聚集索引,如下所示

CREATE NONCLUSTERED INDEX [FCSAcctJournalDetail_idx] ON [dbo].[MyDetail]
(
    [FCSAcct] ASC,
    [FCSCompany] ASC,
    [JournalEntryEffDt] ASC,
    [DataDt] ASC,
    [HeaderId] ASC,
    [JournalDetailId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

1 个答案:

答案 0 :(得分:2)

HeaderId上添加索引:

CREATE NONCLUSTERED INDEX [FCSAcctJournalDetail_HeaderId_idx] ON [dbo].[MyDetail]
(
    [HeaderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

正如David Browne在他的评论中所写-您当前拥有的索引与此查询无关。

如果HeaderId是索引中的第一列,则将是相关的,但是由于它不是第一列(甚至不是接近于第一列),因此在此查询的上下文中根本无关紧要。 / p>