SQL에서 "NOT IN"을 사용하여 한 테이블에는 있지만 다른 테이블에는 없는 행을 선택할 수 있습니다. 연산자. 그러나 이 접근 방식은 대규모 데이터 세트의 경우 성능 문제로 이어질 수 있습니다.
동일한 기본 키를 가진 두 개의 테이블 A와 B가 있는 시나리오를 생각해 보세요. B에 없는 A의 모든 행을 선택하려면 다음 쿼리를 사용할 수 있습니다.
<code class="sql">SELECT * FROM A WHERE NOT EXISTS ( SELECT * FROM B WHERE A.pk = B.pk );</code>
이 쿼리는 작동하지만 특히 대규모 테이블의 경우 비효율적일 수 있습니다. 데이터베이스는 A의 각 행에 대해 중첩 쿼리를 수행하여 B에 존재하는지 확인해야 합니다.
더 나은 접근 방식은 왼쪽 조인을 사용하고 null 값을 기준으로 결과를 필터링하는 것입니다. 이 방법에는 공통 열에서 A와 B를 조인한 다음 B의 해당 열이 null인 A에서 행을 선택하는 작업이 포함됩니다.
<code class="sql">SELECT A.* FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;</code>
이 쿼리는 단일 조인 작업을 수행하고 부재를 기준으로 결과를 필터링합니다. B의 값입니다. 일반적으로 대규모 데이터세트의 경우 "NOT IN" 접근 방식보다 빠릅니다.
또는 WHERE 절에서 하위 쿼리를 사용할 수 있습니다.
<code class="sql">SELECT A.* FROM A WHERE x NOT IN ( SELECT y FROM B );</code>
이 접근 방식은 대규모 데이터 세트에도 좋은 성능을 제공할 수 있습니다.
궁극적으로 쿼리를 최적화하는 가장 좋은 방법은 특정 데이터 및 데이터베이스 구성에 따라 다릅니다. 다양한 접근 방식을 테스트하고 쿼리에 최적의 성능을 제공하는 접근 방식을 선택하는 것이 좋습니다.
위 내용은 한 테이블에서 다른 테이블에 존재하지 않는 행을 효율적으로 선택하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!