>  기사  >  데이터 베이스  >  한 테이블에서 다른 테이블에 존재하지 않는 행을 효율적으로 선택하려면 어떻게 해야 합니까?

한 테이블에서 다른 테이블에 존재하지 않는 행을 효율적으로 선택하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-10-31 11:47:31917검색

 How Can I Efficiently Select Rows from One Table That Don't Exist in Another?

"NOT IN" 테이블을 사용하여 SQL 쿼리 최적화

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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