SQL

SQL

EXISTS는 IN보다 빠를 때가 많다

페이지 정보

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

본문

EXISTSIN보다 빠를 때가 많다

특히 서브쿼리 결과가 클 경우 IN은 성능 함정이 된다


❌ 느려지는 패턴: IN으로 서브쿼리 비교

SELECT name
FROM users
WHERE id IN (
  SELECT user_id
  FROM orders
  WHERE status = 'paid'
);
  • 서브쿼리 결과가 많아지면

  • DB는 모든 값을 메모리에 로드해서 비교

  • 인덱스를 못 타거나, N^2 성능 저하 발생


EXISTS로 존재 여부만 검사

SELECT name
FROM users u
WHERE EXISTS (
  SELECT 1
  FROM orders o
  WHERE o.user_id = u.id AND o.status = 'paid'
);
  • 매칭되는 row 하나만 있어도 즉시 참

  • 서브쿼리 결과 전체 로딩 안 함

  • 대량 데이터에 훨씬 유리


✔️ 서브쿼리 결과가 커질 수 있다면
IN보다 EXISTS가 훨씬 안전하고 빠르다.
특히 서브쿼리에 DISTINCT, JOIN, LIMIT 등이 없다면 꼭 바꿔보자.

댓글목록

등록된 댓글이 없습니다.