Запрос SQL Paging (Offset, Fetch) очень медленный - PullRequest
0 голосов
/ 10 июня 2019

Я не понимаю, что здесь происходит.Я запрашиваю одну таблицу, как видно из моего запроса ниже.Я получаю только первые 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)

Существует некластеризованный индексна головной станции, как показано ниже

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 Ответ

2 голосов
/ 10 июня 2019

Добавить индекс на 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

Как писал Дэвид Браун в своем комментарии, индекс, который у вас есть в данный момент, не имеет отношения к этому запросу.

Если бы HeaderId был первым столбцом в индексе, это было бы уместно, но, поскольку это не первый (и даже не близкий к тому, чтобы быть первым), он просто не имеет значения в контексте этого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...