Dalam mencoba meningkatkan kecepatan kueri yang sangat lambat (beberapa menit di dua tabel dengan masing-masing hanya ~ 50.000 baris, di SQL Server 2008 jika itu penting), saya mempersempit masalah ke OR
dalam gabungan batin saya, seperti di:
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
Saya mengubah ini menjadi (yang saya harap adalah) pasangan kiri yang setara, yang ditunjukkan di sini:
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
.. dan kueri sekarang berjalan sekitar satu detik!
Apakah umumnya merupakan ide yang buruk untuk memasukkan OR
kondisi gabungan? Atau apakah saya hanya tidak beruntung dalam tata letak tabel saya?