이 글이 답하는 질문
- ABAP SQL에서 EXISTS와 IN 중 어떤 게 빠른가?
- 서브쿼리가 클 때 EXISTS가 유리한 이유는?
- NOT EXISTS vs NOT IN 어떤 차이가 있나?
EXISTS vs IN 기본 차이
IN은 서브쿼리 결과 전체를 메모리에 올린 뒤 비교합니다. EXISTS는 조건 만족하는 첫 번째 행을 찾는 즉시 멈춥니다. 서브쿼리 결과가 클수록 EXISTS가 유리합니다.
직접 해보기
1. IN 방식 — 서브쿼리 전체 결과 메모리 적재
SELECT vbeln FROM vbak
WHERE kunnr IN (
SELECT kunnr FROM kna1
WHERE land1 = 'KR'
).
" 결과가 수백만 건이면 메모리 부담
2. EXISTS 방식 — 첫 번째 매칭 즉시 종료
SELECT vbeln FROM vbak AS o
WHERE EXISTS (
SELECT 1 FROM kna1 AS i
WHERE i.kunnr = o.kunnr
AND i.land1 = 'KR'
).
" 매칭 즉시 멈춤 → 대용량에 유리
3. NOT EXISTS vs NOT IN — NULL 주의
" NOT IN: 서브쿼리에 NULL이 하나라도 있으면 결과 0건
" NOT EXISTS: NULL 영향 없이 정확히 동작
SELECT vbeln FROM vbak AS o
WHERE NOT EXISTS (
SELECT 1 FROM vbap AS i
WHERE i.vbeln = o.vbeln
).
삽질 노트
- 서브쿼리 결과가 작으면 (<100건) IN이 오히려 빠를 수 있음 — 항상 EXISTS가 정답은 아님
- NOT IN + NULL = 결과 0건 버그 → NOT EXISTS 사용 권장
- HANA에서는 옵티마이저가 대부분 자동 최적화 — 그래도 코드 명확성을 위해 EXISTS 권장
핵심 한 줄
서브쿼리 크면 EXISTS, NOT IN은 NULL 버그 위험 → NOT EXISTS로 대체.
더 파볼 주제
- ABAP SQL — FOR ALL ENTRIES 활용과 주의점
- ABAP SQL — JOIN vs 서브쿼리 선택 기준
- HANA 실행계획 — SQL Plan Cache 분석
댓글 0
아직 댓글이 없습니다.