Ich wurde eine Abfrage zum Ausführen (unten), wo in der Anwendung, die ich erstellen, das von Datum kann zur Laufzeit geändert werden gegeben. Also, wenn ich ein Startdatum von '1/1/2010' starte, erhalte ich viel mehr Daten (216620 Zeilen zurückgegeben) dann wenn ich ein Datum vor 3 Tagen '10/17/2017 'verwendet habe (1006 Zeilen zurückgegeben), aber diese Abfrage dauert aus irgendeinem Grund extrem lange, und in meiner Anwendung läuft es zeitweise ab.Langsame SQL-Abfrage basierend auf dem Datum
Sollte diese Abfrage irgendwie optimiert werden, oder könnte dies ein Server/Hardware-Problem sein? Ich finde gerade diese seltsame eine Abfrage für die letzten 3 Tage dauert so viel länger als eine Abfrage für Daten mehrere Jahre erstreckt, und leider mal-out in meiner WinForms-Anwendung
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]
Haben Sie einen Abfrageplan können wir sehen, um den Flaschenhals zu identifizieren – MarkD
Ich habe meinen Beitrag bearbeitet, um den Abfrageplan aufzustellen. Hoffe, das gibt dir genug Informationen. – Maverick
Nicht sicher, wie groß Ihre Transaction-Tabelle ist, aber die geschachtelte Schleife mit einem Clustered-Index-Scan auf beiden Seiten könnte von mindestens einem, wenn nicht zwei, NCIs in der Transaktionstabelle profitieren. –