집 >데이터 베이스 >MySQL 튜토리얼 >INNER JOIN의 'OR' 조건이 왜 그렇게 느린가요?
SQL Server 2008의 INNER JOIN 조건에서 "OR" 사용으로 인한 성능 문제 분석
행이 약 50,000개인 두 개의 작은 테이블에 대한 느린 쿼리와 SQL Server 2008 데이터베이스 전문가의 주의 깊은 조사를 통해 원인이 밝혀졌습니다. 바로 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>
"OR"을 LEFT JOIN 쌍으로 대체한 후 쿼리 속도가 크게 향상되어 단 1초 만에 쿼리를 완료할 수 있습니다.
JOIN 조건의 "OR"은 나쁜 습관인가요?
전문가들은 JOIN 조건에 "OR"을 사용하는 것이 항상 바람직하지 않은지, 아니면 특정 테이블 구조로 인해 예외가 되는 것인지 궁금해합니다.
기술적 설명
JOIN 조건에서 "OR"을 사용할 때의 문제점은 HASH JOIN 또는 MERGE JOIN 연산으로 최적화할 수 없다는 것입니다. 쿼리 최적화 프로그램은 이를 다양한 결과 집합의 병합으로만 나타낼 수 있습니다.
<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>
각 개별 결과 집합은 동등 조인이지만 "OR"이 있는 경우 최적화 프로그램은 이를 동등 조인으로 인식하지 않습니다. 이로 인해 비효율적인 쿼리가 발생합니다.
위 내용은 INNER JOIN의 'OR' 조건이 왜 그렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!