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

영삼이
본문
✅ 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
은 결과를 모두 메모리에 로드하여 비교하는 방식이라 데이터가 많을수록 성능 저하가 발생한다.
- 이전글JOIN을 사용할 때는 항상 필요한 데이터만 조인하라 25.03.28
- 다음글LIMIT과 OFFSET은 성능이 저하될 수 있다 — WHERE으로 페이지네이션을 최적화하라 25.03.28
댓글목록
등록된 댓글이 없습니다.