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

영삼이
본문
✅ 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
를 사용하는 것이 최적화에 도움이 된다.
- 이전글인덱스를 활용한 쿼리 성능 최적화 25.03.28
- 다음글LEFT JOIN을 사용할 때, NULL 처리에 주의하라 25.03.28
댓글목록
등록된 댓글이 없습니다.