Trong việc cố gắng cải thiện tốc độ của một truy vấn cực kỳ chậm (vài phút trên hai bảng chỉ có ~ 50.000 hàng mỗi bảng, trên SQL Server 2008 nếu điều đó quan trọng), tôi đã thu hẹp vấn đề thành một phép OR
nối bên trong của tôi, như trong:
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
Tôi đã thay đổi điều này thành (những gì tôi hy vọng là) một cặp nối trái tương đương, được hiển thị ở đây:
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
.. và truy vấn hiện chạy trong khoảng một giây!
Nói chung có phải là một ý tưởng tồi khi đặt một OR
điều kiện tham gia? Hay tôi chỉ thiếu may mắn bằng cách nào đó trong cách bố trí các bảng của tôi?