Ich möchte diese Abfrage verbessern.So verbessern Sie diese linke Join-Abfrage
Mit INNER JOIN dauert es nicht (weniger als 1 Sekunde).
Aber mit LINKEN JOIN dauert es fast 1 min.
Das Ergebnis ist etwa 17500 Datensätze.
Ich verstehe nicht warum, und ich möchte es verbessern.
SELECT TOP (100) PERCENT iti.Id
, iti.TransferDate
, iti.FromSLoc AS FromSLocId
, slf.Name AS FromSLoc
, ct.Id AS CrateTypeId
, ct.Type AS CrateType
, cs.Id AS CrateSizeId
, cs.Size AS CrateSize
, itd.Amount
, iti.SenderRemark
, iti.ToSLoc AS ToSLocId
, slt.Name AS ToSLoc
, iti.StatusId, ts.Name AS Status
, iti.CreatedBy
FROM dbo.tbIntTransferInfo AS iti
INNER JOIN dbo.tbmStorageLocation AS slf
ON slf.Id = iti.FromSLoc
INNER JOIN dbo.tbmStorageLocation AS slt
ON slt.Id = iti.ToSLoc
INNER JOIN dbo.tbmTransferStatus AS ts
ON ts.Id = iti.StatusId
CROSS JOIN dbo.tbmCrateSize AS cs
INNER JOIN dbo.tbmCrateType AS ct
ON ct.Id = cs.CrateTypeId
AND cs.Cancelled = 0
LEFT JOIN dbo.tbIntTransferDetail AS itd
ON iti.Id = itd.IntTransferId
AND itd.CrateSizeId = cs.Id
ORDER BY iti.Id, CrateTypeId, CrateSizeId
In meinem System habe ich 6 Größen der Kiste. Und eine Transaktion kann bis zu 6 Kistengrößen übertragen. Was ich will, sind Datensätze, die Transaktionen mit 6 Kistengrößen anzeigen. Wenn die Transaktion keine Kistengröße übertragen hat, lassen Sie sie NULL.
Das Ergebnis, das ich so aussehen soll:
Id, ... , CrateType, CrateSize, Amount
1 ... X Big 100
1 ... X Small 50
1 ... Y Big NULL
1 ... Y Small NULL
1 ... Z Big 10
1 ... Z Small 20
2 ... X Big 30
2 ... X Small 40
2 ... Y Big NULL
2 ... Y Small NULL
2 ... Z Big NULL
2 ... Z Small NULL
Transaktion 1 -> Transfer Kiste Typ 'X' und 'Z' mit 'Big' und 'Small' Größe, Transfer nicht Kiste Tippe 'Y'.
Transaktion 2 -> Transfer Kiste Typ 'X' mit 'Big' und 'Small' Größe, nicht übertragen Kiste Typ 'Y' und 'Z'.
Helfen Sie mir bitte zu verbessern.
Haben Sie den Database Tuning Engine Advisor für Ihre Abfrage ausprobiert? – mellamokb
Was ist falsch an der Verwendung eines 'INNER JOIN's? Vermutlich gibt es Ihnen nicht den richtigen Datensatz, aber Sie sagen uns auch nicht, was das ist. – Bojangles
Brauchen Sie wirklich dieses 'CROSS JOIN' ?. Was ist der 'INNER JOIN', den du zu' LEFT JOIN' änderst? – Lamak