15

"이 쿼리 30초나 걸려요"

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

학습 목표

쿼리 성능 문제의 실무 상황을 이해한다 EXPLAIN이 필요한 이유를 체감한다

목요일 아침, 긴급 호출

"이 대시보드 페이지 로딩이 30초나 걸려. 쿼리가 느린 것 같은데 좀 봐줄 수 있어?"

문제의 쿼리:

에디터 로딩 중...

"이 쿼리가 왜 느린지 어떻게 알 수 있지?"


느린 쿼리의 원인들

  1. Full Table Scan: 인덱스 없이 전체 테이블 읽기
  2. 비효율적인 JOIN: 중첩 루프로 모든 조합 검사
  3. 대용량 정렬: 메모리에서 감당 못해 디스크 사용
  4. 불필요한 데이터: 100개만 필요한데 100만 개 처리

하지만 눈으로는 안 보인다.


EXPLAIN: 쿼리의 CT 촬영

에디터 로딩 중...

결과:

에디터 로딩 중...

Seq Scan: 전체 테이블을 처음부터 끝까지 읽는다! 200만 행을 하나하나 확인 중이었다.


해결: 인덱스 추가

에디터 로딩 중...

다시 EXPLAIN:

에디터 로딩 중...

28초 → 0.1초: 280배 빨라졌다!


오늘 배울 것

  1. EXPLAIN: 쿼리 실행 계획 읽기
  2. EXPLAIN ANALYZE: 실제 실행 시간 측정
  3. 인덱스: 왜 필요하고, 어떻게 만드는지
  4. 성능 최적화 패턴: 흔한 문제와 해결책

"쿼리가 느리면 EXPLAIN부터!"