Ho creato il comando SQL che utilizza INNER JOIN su 9 tabelle, tuttavia questo comando richiede molto tempo (più di cinque minuti). Quindi la mia gente mi ha suggerito di cambiare INNER JOIN in LEFT JOIN perché le prestazioni di LEFT JOIN sono migliori, nonostante quello che so. Dopo averlo modificato, la velocità della query è stata notevolmente migliorata.
Vorrei sapere perché LEFT JOIN è più veloce di INNER JOIN?
Il mio comando SQL è simile al seguente:
SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D
e così via
Aggiornamento: questo è un breve riassunto del mio schema.
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
? Altrimenti potresti essere in grado di utilizzare un semi join. Se sì, potresti usarloUNION
come alternativa. Pubblicare solo la tuaFROM
clausola è un'informazione inadeguata qui.