J'ai créé une commande SQL qui utilise INNER JOIN sur 9 tables, de toute façon cette commande prend très longtemps (plus de cinq minutes). Donc mes gens m'ont suggéré de changer INNER JOIN en LEFT JOIN parce que les performances de LEFT JOIN sont meilleures, malgré ce que je sais. Après l'avoir changé, la vitesse de la requête s'est considérablement améliorée.
Je voudrais savoir pourquoi LEFT JOIN est plus rapide que INNER JOIN?
Ma commande SQL ressemble à ci-dessous:
SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D
et ainsi de suite
Mise à jour: Ceci est bref de mon schéma.
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
? Sinon, vous pourrez peut-être utiliser une semi-jointure. Si oui, vous pourriez l'utiliserUNION
comme alternative. Publier uniquement votreFROM
clause est une information inadéquate ici.