25

쿼리 최적화: 흔한 문제와 해결

Day 4: 쿼리가 왜 이렇게 느려?

학습 목표

흔한 성능 문제 패턴을 인식한다 각 패턴의 해결 방법을 익힌다

패턴 1: SELECT * 피하기

문제

에디터 로딩 중...
  • 불필요한 컬럼까지 읽어서 메모리/네트워크 낭비
  • 인덱스만으로 처리 가능한 쿼리도 테이블 접근 필요

해결

에디터 로딩 중...

필요한 컬럼만 명시!


패턴 2: 조기 필터링

문제

에디터 로딩 중...

큰 테이블끼리 JOIN 후 필터링 → 느림

해결

에디터 로딩 중...

작은 결과끼리 JOIN!


패턴 3: N+1 쿼리 피하기

문제 (애플리케이션 코드)

에디터 로딩 중...

101번의 쿼리 실행!

해결

에디터 로딩 중...

또는:

에디터 로딩 중...

패턴 4: 페이지네이션 최적화

문제

에디터 로딩 중...

100000개를 읽고 버린 후 10개 반환 → 느림

해결: 커서 기반 페이지네이션

에디터 로딩 중...

OFFSET 대신 WHERE로 시작점 지정!


패턴 5: EXISTS vs IN

IN (때때로 느림)

에디터 로딩 중...

서브쿼리 전체 실행 후 비교

EXISTS (보통 더 빠름)

에디터 로딩 중...

조건 만족하는 행 찾으면 즉시 종료


체크리스트: 느린 쿼리 디버깅

에디터 로딩 중...