SQL

SQL

EXISTS는 대량 데이터를 필터링할 때 성능을 최적화할 수 있다

페이지 정보

profile_image
영삼이
0건 51회 25-03-28 15:41

본문

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는 서브쿼리가 하나라도 일치하면 즉시 종료

  • 불필요한 데이터를 메모리에 로드하지 않으므로 성능이 더 효율적


IN vs EXISTS

  • IN: 서브쿼리에서 모든 값을 반환하고 비교함

  • EXISTS: 서브쿼리가 하나라도 일치하면 종료되므로 서브쿼리의 크기에 관계없이 성능이 일정


언제 EXISTS를 사용해야 할까?

  • 서브쿼리가 대량 데이터를 반환할 경우

  • 서브쿼리의 결과가 크게 변하지 않는 경우

  • 존재 여부만 확인하면 될 때


✔️ IN이 적합한 경우도 있지만, 서브쿼리 결과가 커지거나 복잡한 조건을 처리할 때는 EXISTS가 성능 면에서 더 유리하다.
서브쿼리에서 값을 모두 반환할 필요 없이 존재 여부만 확인할 때 EXISTS를 사용하는 것이 최적화에 도움이 된다.

댓글목록

등록된 댓글이 없습니다.