전체 목록
데이터베이스Medium#213

쿼리 실행 계획(Execution Plan)을 확인해야 하는 이유는 무엇인가요?

#데이터베이스#ExecutionPlan#SQL#성능

답변 포인트

옵티마이저 선택과 병목 확인를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

실행 계획은 DB가 인덱스, 스캔, 조인 순서, 정렬을 어떻게 수행할지 보여줍니다. 느린 쿼리는 실행 계획을 보고 병목을 찾아야 합니다.

쿼리 실행 계획은 DB 옵티마이저가 SQL을 어떤 순서와 방법으로 실행할지 보여주는 자료입니다. 인덱스를 쓰는지, 테이블을 얼마나 읽을지, join 방식이 무엇인지 확인하지 않으면 성능 문제를 감으로만 추측하게 됩니다.

실행 계획에서 보는 것

  • 접근 방식: sequential scan, index scan, index only scan
  • join 방식: nested loop, hash join, merge join
  • 예상 row 수와 실제 row 수의 차이
  • 정렬, 임시 테이블, filesort, hash aggregate 발생 여부
  • 비용이 큰 노드와 병목 위치
SQL
EXPLAIN ANALYZE
SELECT *
FROM orders
WHERE user_id = 10
ORDER BY created_at DESC
LIMIT 20;

왜 중요한가요?

인덱스를 만들었다고 항상 사용되는 것은 아닙니다. 조건 선택도가 낮거나 통계가 부정확하거나 함수로 컬럼을 감싸면 옵티마이저가 full scan을 선택할 수 있습니다.

SQL
-- 인덱스 사용이 어려울 수 있음
WHERE DATE(created_at) = '2026-05-21'

-- 범위 조건으로 바꾸는 편이 좋음
WHERE created_at >= '2026-05-21'
  AND created_at <  '2026-05-22'

실무 활용 절차

  1. 느린 쿼리를 slow query log/APM에서 찾습니다.
  2. EXPLAIN으로 계획을 확인합니다.
  3. row 추정과 실제 결과가 크게 다른지 봅니다.
  4. 인덱스, SQL 형태, 통계 갱신, join 순서를 조정합니다.
  5. 변경 전후 실행 시간과 buffer read를 비교합니다.

주의할 점

실행 계획은 데이터 분포와 파라미터에 따라 달라집니다. 개발 DB의 작은 샘플에서 빠른 쿼리가 운영 DB에서는 느릴 수 있습니다. 가능하면 운영과 유사한 데이터량과 통계에서 확인해야 합니다.

면접 답변 포인트

실행 계획은 DB가 쿼리를 실행하는 실제 전략을 보여주는 도구이며, 인덱스 사용 여부와 스캔 범위, 조인 방식, row 추정 오류를 확인해 성능 개선 근거를 만드는 데 필요하다고 답하면 좋습니다.

관련 질문

같은 카테고리/태그 기준