ในการพยายามปรับปรุงความเร็วของแบบสอบถามที่ช้ามาก (หลายนาทีในสองตารางโดยมีแถวละประมาณ 50,000 แถวเท่านั้นบน SQL Server 2008 ถ้าเป็นเรื่องสำคัญ) ฉันได้ จำกัด ปัญหาให้แคบลงเป็นการรวมOR
ภายในของฉันเช่นใน:
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
ฉันเปลี่ยนสิ่งนี้เป็น (สิ่งที่ฉันหวังคือ) การรวมด้านซ้ายคู่ที่เทียบเท่าแสดงที่นี่:
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
.. และการสืบค้นจะทำงานในเวลาประมาณหนึ่งวินาที!
โดยทั่วไปเป็นความคิดที่ดีที่จะอยู่OR
ในเงื่อนไขการเข้าร่วมหรือไม่? หรือว่าฉันโชคไม่ดีในการจัดวางตารางของฉัน?