बेहद धीमी गति से क्वेरी की गति को बेहतर बनाने की कोशिश में ( SQL सर्वर 2008 पर अगर यह मायने रखता है, तो प्रत्येक ~ केवल 50,000 पंक्तियों के साथ दो तालिकाओं पर कई मिनट ), मैंने समस्या को 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
जॉइन करने की स्थिति में यह एक बुरा विचार है ? या मैं अपनी टेबल के लेआउट में किसी तरह से बदकिस्मत हूं?