>  기사  >  데이터 베이스  >  다른 테이블에 없는 행을 찾는 데 NOT EXISTS 하위 쿼리 또는 LEFT JOIN 중 어느 것이 더 효율적입니까?

다른 테이블에 없는 행을 찾는 데 NOT EXISTS 하위 쿼리 또는 LEFT JOIN 중 어느 것이 더 효율적입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-26 02:13:28234검색

 Which is More Efficient: NOT EXISTS Subquery or LEFT JOIN for Finding Rows Not Present in Another Table?

다른 테이블에 없는 행에 대한 MySQL 쿼리 최적화

여러 테이블로 작업할 때 존재하는 레코드를 검색해야 하는 경우가 많습니다. 한 테이블에는 있지만 다른 테이블에는 없습니다. MySQL의 맥락에서 이 시나리오를 해결하기 위한 두 가지 일반적인 접근 방식이 있습니다. 즉, NOT EXISTS 하위 쿼리와 LEFT JOIN에 이어 IS NULL 검사를 수행하는 것입니다.

제공된 예에 설명된 NOT EXISTS 하위 쿼리 접근 방식은 다음과 같습니다. 일치하는 기본 키를 기반으로 테이블 A의 레코드가 테이블 B에 존재하지 않는지 확인하는 작업입니다. 이 방법은 효과가 있지만 각 레코드에 대해 여러 데이터베이스 조회가 필요하므로 특히 대규모 데이터 세트의 경우 비효율적일 수 있습니다.

성능을 향상하려면 질문에서 제안한 대로 LEFT JOIN을 대신 사용하는 것이 좋습니다. 이 접근 방식은 테이블 B에 일치하는 레코드가 있는 레코드와 그렇지 않은 레코드를 포함하여 테이블 A의 모든 레코드를 반환합니다. 그런 다음 테이블 B의 해당 열이 NULL인지 확인하여 일치하는 레코드가 없는 레코드를 필터링할 수 있습니다.

다음 최적화된 쿼리는 이 접근 방식을 보여줍니다.

<code class="sql">SELECT A.*
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;</code>

이 쿼리는 여러 데이터베이스 조회가 필요하지 않으므로 특히 대규모 데이터 세트의 경우 NOT EXISTS 하위 쿼리 접근 방식보다 훨씬 빠르게 수행됩니다. 테이블 A에 고유한 레코드만 효율적으로 반환합니다.

일반적으로 이러한 유형의 쿼리에는 LEFT JOIN 접근 방식이 더 효율적이고 확장 가능하므로 선호됩니다. 그러나 가장 적합한 솔루션을 결정하려면 데이터 세트의 구체적인 특성과 성능 요구 사항을 고려하는 것이 중요합니다.

위 내용은 다른 테이블에 없는 행을 찾는 데 NOT EXISTS 하위 쿼리 또는 LEFT JOIN 중 어느 것이 더 효율적입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.