我被给了一个查询来运行(下),在应用程序中,我创建的起始日期可以在运行时更改。因此,如果我运行“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受益。 –