Ich habe einen SQL-Befehl erstellt, der INNER JOIN für 9 Tabellen verwendet. Dieser Befehl dauert jedoch sehr lange (mehr als fünf Minuten). Mein Volk schlug mir daher vor, INNER JOIN in LEFT JOIN zu ändern, da die Leistung von LEFT JOIN trotz meiner Kenntnisse besser ist. Nachdem ich es geändert hatte, wurde die Abfragegeschwindigkeit erheblich verbessert.
Ich würde gerne wissen, warum LEFT JOIN schneller ist als INNER JOIN?
Mein SQL-Befehl sieht wie folgt aus:
SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D
und so weiter
Update: Dies ist eine kurze Beschreibung meines Schemas.
FROM sidisaleshdrmly a -- NOT HAVE PK AND FK
INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK
ON a.CompanyCd = b.CompanyCd
AND a.SPRNo = b.SPRNo
AND a.SuffixNo = b.SuffixNo
AND a.dnno = b.dnno
INNER JOIN exFSlipDet h -- PK = CompanyCd, FSlipNo, FSlipSuffix, FSlipLine
ON a.CompanyCd = h.CompanyCd
AND a.sprno = h.AcctSPRNo
INNER JOIN exFSlipHdr c -- PK = CompanyCd, FSlipNo, FSlipSuffix
ON c.CompanyCd = h.CompanyCd
AND c.FSlipNo = h.FSlipNo
AND c.FSlipSuffix = h.FSlipSuffix
INNER JOIN coMappingExpParty d -- NO PK AND FK
ON c.CompanyCd = d.CompanyCd
AND c.CountryCd = d.CountryCd
INNER JOIN coProduct e -- PK = CompanyCd, ProductSalesCd
ON b.CompanyCd = e.CompanyCd
AND b.ProductSalesCd = e.ProductSalesCd
LEFT JOIN coUOM i -- PK = UOMId
ON h.UOMId = i.UOMId
INNER JOIN coProductOldInformation j -- PK = CompanyCd, BFStatus, SpecCd
ON a.CompanyCd = j.CompanyCd
AND b.BFStatus = j.BFStatus
AND b.ProductSalesCd = j.ProductSalesCd
INNER JOIN coProductGroup1 g1 -- PK = CompanyCd, ProductCategoryCd, UsedDepartment, ProductGroup1Cd
ON e.ProductGroup1Cd = g1.ProductGroup1Cd
INNER JOIN coProductGroup2 g2 -- PK = CompanyCd, ProductCategoryCd, UsedDepartment, ProductGroup2Cd
ON e.ProductGroup1Cd = g2.ProductGroup1Cd
coUOM
? Wenn nicht, können Sie möglicherweise einen Semi-Join verwenden. Wenn ja, können SieUNION
als Alternative verwenden. Nur IhreFROM
Klausel zu veröffentlichen, ist hier eine unzureichende Information.