En essayant d'améliorer la vitesse d'une requête extrêmement lente (plusieurs minutes sur deux tables avec seulement ~ 50000 lignes chacune, sur SQL Server 2008 si cela compte), j'ai réduit le problème à une OR
jointure interne, comme dans:
SELECT mt.ID, mt.ParentID, ot.MasterID
FROM dbo.MainTable AS mt
INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID
OR ot.ID = mt.ParentID
J'ai changé cela en (ce que j'espère est) une paire équivalente de jointures gauches, montrée ici:
SELECT mt.ID, mt.ParentID,
CASE WHEN ot1.MasterID IS NOT NULL THEN
ot1.MasterID ELSE
ot2.MasterID END AS MasterID
FROM dbo.MainTable AS mt
LEFT JOIN dbo.OtherTable AS ot1 ON ot1.ParentID = mt.ID
LEFT JOIN dbo.OtherTable AS ot2 ON ot2.ID = mt.ParentID
WHERE ot1.MasterID IS NOT NULL OR ot2.MasterID IS NOT NULL
.. et la requête s'exécute maintenant dans environ une seconde!
Est-ce généralement une mauvaise idée de mettre un OR
dans une condition de jointure? Ou suis-je simplement malchanceux dans la disposition de mes tableaux?