SQL에서 "NOT IN"을 사용하여 한 테이블에는 있지만 다른 테이블에는 없는 행을 선택할 수 있습니다. 연산자. 그러나 이 접근 방식은 대규모 데이터 세트의 경우 성능 문제로 이어질 수 있습니다.
기본 키가 동일한 두 테이블 A와 B가 있는 시나리오를 생각해 보세요. B에 없는 A의 모든 행을 선택하려면 다음 쿼리를 사용할 수 있습니다.
SELECT *
FROM A
WHERE NOT EXISTS (
SELECT *
FROM B
WHERE A.pk = B.pk
);
이 쿼리는 작동하지만 특히 큰 테이블의 경우 비효율적일 수 있습니다. 데이터베이스는 A의 각 행에 대해 중첩 쿼리를 수행하여 B에 해당 행이 있는지 확인해야 합니다.
더 나은 접근 방식은 왼쪽 조인을 사용하고 null 값을 기준으로 결과를 필터링하는 것입니다. 이 방법에는 공통 열에서 A와 B를 결합한 다음 B의 해당 열이 null인 A에서 행을 선택하는 작업이 포함됩니다.
SELECT A.*
FROM A
LEFT JOIN B
ON A.x = B.y
WHERE B.y IS NULL;
이 쿼리는 단일 조인 작업을 수행하고 B에 값이 없음을 기준으로 결과를 필터링합니다. 일반적으로 대규모 데이터 세트의 경우 "NOT IN" 접근 방식보다 빠릅니다.
또는 WHERE 절에서 하위 쿼리를 사용할 수 있습니다.
SELECT A.*
FROM A
WHERE x NOT IN (
SELECT y
FROM B
);
이 접근 방식은 대규모 데이터 세트에 대해서도 우수한 성능을 제공할 수 있습니다.
궁극적으로 쿼리를 최적화하는 가장 좋은 방법은 특정 데이터 및 데이터베이스 구성에 따라 다릅니다. 다양한 접근 방식을 테스트하고 쿼리에 최적의 성능을 제공하는 접근 방식을 선택하는 것이 좋습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3