EXISTS는 IN보다 빠를 때가 많다
페이지 정보

영삼이
본문
✅ EXISTS
는 IN
보다 빠를 때가 많다
특히 서브쿼리 결과가 클 경우
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
등이 없다면 꼭 바꿔보자.
- 이전글COUNT(*)보다 COUNT(컬럼)이 더 빠를 때가 있다 25.03.28
- 다음글WHERE보다 JOIN에 조건을 거는 게 더 빠를 때가 있다 25.03.28
댓글목록
등록된 댓글이 없습니다.