News

EXISTS vs IN — ABAP 서브쿼리 성능 차이 #shorts #SAP #ABAP

이 글이 답하는 질문

  • 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

아직 댓글이 없습니다.