집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 하위 쿼리의 EXISTS와 IN: 어느 것이 더 나은 성능을 발휘합니까?
MySQL에서 EXISTS와 IN을 사용하는 하위 쿼리: 성능 비교
하위 쿼리는 데이터베이스에서 특정 데이터를 추출하는 데 중요한 역할을 합니다. 두 가지 일반적인 하위 쿼리 방법은 EXISTS와 IN입니다. 둘 다 비슷한 결과를 얻을 수 있지만 서로 다른 성능 특성을 나타냅니다.
다음 두 쿼리를 고려하세요.
방법 1:
SELECT * FROM tracker WHERE reservation_id IN ( SELECT reservation_id FROM tracker GROUP BY reservation_id HAVING ( method = 1 AND type = 0 AND Count(*) > 1 ) OR ( method = 1 AND type = 1 AND Count(*) > 1 ) OR ( method = 2 AND type = 2 AND Count(*) > 0 ) OR ( method = 3 AND type = 0 AND Count(*) > 0 ) OR ( method = 3 AND type = 1 AND Count(*) > 1 ) OR ( method = 3 AND type = 3 AND Count(*) > 0 ) );
방법 2:
SELECT * FROM tracker t WHERE EXISTS ( SELECT reservation_id FROM tracker t3 WHERE t3.reservation_id = t.reservation_id GROUP BY reservation_id HAVING ( METHOD = 1 AND TYPE = 0 AND COUNT(*) > 1 ) OR ( METHOD = 1 AND TYPE = 1 AND COUNT(*) > 1 ) OR ( METHOD = 2 AND TYPE = 2 AND COUNT(*) > 0 ) OR ( METHOD = 3 AND TYPE = 0 AND COUNT(*) > 0 ) OR ( METHOD = 3 AND TYPE = 1 AND COUNT(*) > 1 ) OR ( METHOD = 3 AND TYPE = 3 AND COUNT(*) > 0 ) );
성능 측면에서 방법 2는 방법 1보다 훨씬 뛰어나며 실행 시간이 10초 이상인 데 비해 1초도 채 걸리지 않습니다. 이러한 불일치의 이유를 이해하려면 각 방법의 내부 작동 방식을 자세히 조사해야 합니다.
EXISTS 대 IN: 주요 차이점
성능 고려 사항
결론
일반적으로, EXISTS는 하위 쿼리가 많은 수의 행을 반환할 것으로 예상되거나 null 값이 포함된 경우 권장됩니다. 작은 하위 쿼리의 경우 IN이 더 성능이 좋을 수 있습니다. 특정 쿼리에 대한 최선의 접근 방식을 결정하려면 항상 계획 설명을 사용하는 것이 좋습니다.
위 내용은 MySQL 하위 쿼리의 EXISTS와 IN: 어느 것이 더 나은 성능을 발휘합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!