Son derece yavaş bir sorgunun hızını artırmaya çalışırken ( her biri yalnızca ~ 50.000 satır olan iki tabloda birkaç dakika , önemliyse SQL Server 2008'de), sorunu aşağıdaki OR
gibi iç birleşimimde bir ile daralttım :
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
Bunu, burada gösterilen eşdeğer bir çift sol birleşim olarak (umduğum şey) değiştirdim:
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
.. ve sorgu şimdi yaklaşık bir saniye içinde çalışır!
OR
Bir birleştirme koşulu koymak genellikle kötü bir fikir mi? Yoksa masalarımın düzeninde bir şekilde şanssız mıyım?