我被給了一個查詢來運行(下),在應用程序中,我創建的起始日期可以在運行時更改。因此,如果我運行「1/1/2010」的開始日期,那麼我會檢索更多數據(返回216620行),如果我在3天前'10/17/2017'(1006行返回)使用了日期,但該查詢由於某種原因需要很長時間,並且在我的應用程序中超時。基於日期的慢SQL查詢
該查詢是否應該以某種方式進行優化,或者這可能是服務器/硬件問題?我只是覺得這個奇怪的查詢在過去3天內需要這麼比數據跨越多年了,可惜時間出在我的WinForms應用程序查詢更長
SELECT AC.account_and_parents As Account,
TR.IBLoad as [Load ID],
LD.load_inboundBOL as [Customer Details],
TR.ItemNumber as ITEMNUM,
IT.[Description] As[Description],
TR.ToPalletID As[Pallet ID],
Format(TR.Receivedate, 'MM/dd/yyyy') as Receive_Date,
TR.QTY as NETWEIGHT,
TR.WeightGross as [Gross Weight],
TR.ContainerType,
TR.InvenType,
TR.Route,
tr.ToWarehouse as Warehouse,
tr.category as Category,
tr.FGatIntake as [FG at Intake],
CASE
When TR.FGatIntake = 1
THEN
(SELECT TOP 1 tr.ItemNumber FROM [databaseName].[dbo].[Transaction] TR1 WHERE TR1.ToPalletID = TR.ToPalletID and TransCode = 'FRCPT')
END As[Finished Good]
FROM [databaseName].[dbo].[Transaction] TR
INNER JOIN [databaseName].[dbo].[Item] IT
on tr.ItemNumber = IT.ItemNumber
INNER JOIN som5.dbo.Loads LD
on TR.IBLoad = LD.OID
INNER JOIN [SOM5].[dbo].[Accounts] AC
on ld.load_Account = AC.OID
-- PROBLEM IS HERE. Lots or records (January start) are fast,
-- but few records (October start) are *very* slow.
WHERE (TransDateTime Between '10/16/2017' and '10/19/2017')
and Transcode = 'BRCPT'
and ToPalletID not in (Select FromPalletID FROM [SOM5].[dbo].[Transaction] where TransCode = 'UNBRCPT')
ORDER BY Receive_Date,[Load ID],[Pallet ID]
你有一個查詢計劃,我們可以看到識別瓶頸 – MarkD
我編輯我的帖子,把查詢計劃。希望給你足夠的信息。 – Maverick
不知道事務表有多大,但是在其兩側都有聚簇索引掃描的嵌套循環可以從事務處理表上至少有一個(如果不是兩個)NCI受益。 –