그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록Database
Database

NOT IN 쿼리의 문제점과 최적화 방법은 무엇인가요?

실무4/5
설계4/5
인간4/5
기초2/5

면접관의 질문 의도

NOT IN의 함정을 단순 암기하는지보다, NULL 의미론과 실행 계획을 근거로 NOT EXISTS·LEFT JOIN IS NULL 중 무엇을 언제 고르는지 판단할 수 있는지 가른다. "NOT EXISTS가 빠르다" 한 줄로 끝내는지, 데이터 분포까지 들고 가는지가 갈림길이다.

큐레이션 답변

학습 자료

NOT IN은 "이 목록에 없는 행"을 찾는 부정 조건이다. 옵티마이저는 IN과 달리 부정 조건에서 인덱스를 anti-join으로 풀어내야 하고, 서브쿼리 결과에 NULL이 하나라도 섞이면 3값 논리 때문에 전체 결과가 비어 버린다. 그래서 실무에서는 NOT EXISTS나 LEFT JOIN ... IS NULL로 바꿔 NULL 안전성과 실행 계획을 동시에 챙기는 쪽으로 간다.

좋은 답변 구조

  1. 01NOT IN이 느려지는 두 축(부정 조건의 anti-join 비용, NULL 3값 논리)을 분리해 설명한다
  2. 02EXPLAIN에서 무엇을 확인하는지(anti-join 여부, NULL 컬럼, 목록 크기 임계치) 말한다
  3. 03NOT EXISTS와 LEFT JOIN IS NULL을 각각 어떤 데이터 모양에서 고르는지 기준을 댄다
  4. 04치환 전후 실행 계획과 결과 수를 비교해 검증하는 절차로 마무리한다

자주 실수하는 포인트

서브쿼리 컬럼에 NULL이 섞일 가능성을 확인하지 않고 NOT IN을 그대로 둔다
"NOT EXISTS가 항상 빠르다"고 단정하고 LEFT JOIN IS NULL과의 트레이드오프를 무시한다
치환 후 EXPLAIN을 다시 보지 않아 anti-join이 풀렸는지 확인하지 못한다
DBMS별 옵티마이저 차이를 무시하고 한 DB에서 본 결과를 그대로 일반화한다

실무 맥락

  • 배치·정산 경로에서 "오늘 처리되지 않은 건"을 차집합으로 뽑는 환경
  • 권한 필터링에서 "접근 불가 리소스를 제외"하는 대량 조회가 매번 도는 환경
  • 검색 결과에서 차단·노출 제외 목록을 빼야 하는 트래픽 큰 API
  • DBMS 마이그레이션 직후 같은 SQL이 다른 실행 계획으로 풀리는 환경

본인 경험에 녹이는 힌트

NULL이 섞인 서브쿼리 때문에 결과가 0건으로 빠지는 버그를 잡아본 적이 있다면, NOT IN의 3값 논리를 그 사건의 원인으로 설명할 수 있다

EXPLAIN을 보고 NOT IN을 NOT EXISTS로 바꿔 anti-join이 잡힌 경험이 있다면, 치환 전후 실행 계획 비교를 답변 골격으로 쓸 수 있다

LEFT JOIN IS NULL이 인덱스 덕에 더 빨랐던 경험이 있다면, NOT EXISTS와의 선택 기준을 데이터 분포·중복 행으로 풀어낼 수 있다

DBMS 마이그레이션이나 버전 업 이후 같은 쿼리가 느려진 경험이 있다면, 옵티마이저 차이를 검증하는 절차로 연결할 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1NOT EXISTS와 LEFT JOIN IS NULL은 데이터 분포가 어떻게 달라질 때 선택이 바뀌나요
Q2IN 목록이 수만 개로 커지면 어떤 전략(임시 테이블, 배치 분할 등)을 쓰나요
Q3DBMS별 옵티마이저 차이를 검증할 때 EXPLAIN에서 무엇을 비교하나요
Q4NOT IN을 그대로 둬도 안전한 경우는 어떤 조건이 모두 만족될 때인가요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문