엄청나게 느린 쿼리의 속도를 높이기 위해 ( 중요한 경우 SQL Server 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
.. 이제 쿼리가 약 1 초 안에 실행됩니다!
를 OR
조인 조건에 두는 것이 일반적으로 나쁜 생각 입니까? 아니면 내 테이블 레이아웃이 어떻게 든 운이 좋지 않습니까?