집 >데이터 베이스 >MySQL 튜토리얼 >INNER JOIN의 OR 조건이 성능 저하를 일으키는 이유는 무엇입니까?
데이터베이스 최적화: INNER JOIN에서 OR 조건이 성능에 미치는 영향
데이터베이스 쿼리 최적화에서는 JOIN 문의 다양한 조건이 미치는 영향을 이해하는 것이 중요합니다. 일반적인 문제 중 하나는 INNER JOIN에서 OR 조건을 사용하는 것입니다.
다음 쿼리를 고려해 보세요.
<code class="language-sql">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</code>
이 쿼리는 처음 실행하는 데 몇 분 정도 걸립니다. 자세히 조사한 결과 INNER JOIN의 OR 조건에 문제가 있는 것으로 확인되었습니다.
이 문제를 해결하기 위해 LEFT JOIN 쌍을 사용하도록 쿼리를 다시 작성했습니다.
<code class="language-sql">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</code>
이제 최적화된 쿼리는 약 1초 안에 실행이 완료됩니다.
INNER JOIN에서 OR 조건을 사용하면 다음과 같은 이유로 쿼리 성능에 심각한 영향을 미칩니다.
따라서 이러한 조건은 연결된 결과 집합을 사용하여 표현하는 것이 좋습니다. 위의 예에서는 다음과 같이 번역됩니다.
<code class="language-sql">SELECT * FROM maintable m JOIN othertable o ON o.parentId = m.id UNION ALL SELECT * FROM maintable m JOIN othertable o ON o.id = m.parentId</code>
동등 조인을 사용하고 결과를 연결함으로써 쿼리 최적화 프로그램은 성능 저하 없이 효율적으로 작업을 수행할 수 있습니다. 여기서는 UNION ALL
을 사용하고, 중복 행을 제거하려면 UNION
을 사용하세요.
위 내용은 INNER JOIN의 OR 조건이 성능 저하를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!