Nel tentativo di migliorare la velocità di una query immensamente lenta (diversi minuti su due tabelle con solo ~ 50.000 righe ciascuna, su SQL Server 2008 se è importante), ho ristretto il problema a un OR
nel mio inner join, come in:
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
L'ho cambiato in (quello che spero sia) una coppia equivalente di left join, mostrato qui:
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
.. e la query ora viene eseguita in circa un secondo!
È generalmente una cattiva idea mettere una OR
condizione di join? O sono solo sfortunato in qualche modo nella disposizione dei miei tavoli?