SQL

SQL

IN을 사용한 조건보다 EXISTS가 성능이 좋을 때가 있다

페이지 정보

profile_image
영삼이
0건 43회 25-03-28 15:38

본문

IN을 사용한 조건보다 EXISTS가 성능이 좋을 때가 있다

서브쿼리에서 조건이 많을 경우 IN보다 EXISTS를 고려하자


IN 사용 시 성능 저하

SELECT name
FROM users
WHERE id IN (
    SELECT user_id
    FROM orders
    WHERE status = 'paid'
);
  • IN서브쿼리의 모든 값을 메모리에 로드하고,

  • 그 결과를 전체와 비교하게 되므로,

  • 서브쿼리 결과가 많을수록 성능이 급격히 떨어질 수 있다.


EXISTS 사용 시 성능 개선

SELECT name
FROM users u
WHERE EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.user_id = u.id AND o.status = 'paid'
);
  • EXISTS는 서브쿼리가 하나의 결과를 찾으면 즉시 종료된다.

  • 따라서 불필요한 데이터까지 메모리에 로드하지 않음

  • 서브쿼리의 결과가 크거나 복잡할수록 EXISTS가 성능에서 우위를 점한다.


IN vs EXISTS 비교

  • IN: 서브쿼리 결과를 모두 메모리로 로드한 후 비교

  • EXISTS: 서브쿼리 결과가 하나라도 맞으면 종료

    • 서브쿼리에서 필터링을 더 효율적으로 할 수 있음.


추가 팁

  • 서브쿼리 결과가 크고, 복잡한 조건이 있는 경우 EXISTS를 사용하여 성능을 최적화하자.

  • IN은 서브쿼리 결과가 작고 단순할 때 문법이 간단하고 성능이 좋을 수 있음.


✔️ 서브쿼리가 크거나 조건이 많을 때는 EXISTS를 사용하여 성능을 개선하자.
IN은 결과를 모두 메모리에 로드하여 비교하는 방식이라 데이터가 많을수록 성능 저하가 발생한다.

댓글목록

등록된 댓글이 없습니다.