본문으로 건너뛰기
SQLD 준비실
이론 전체 목차 열기 22 / 32

SQL 고급활용 및 튜닝 · 실행 계획 분석 22 / 32

SQL 분석 도구

실행 계획을 읽을 때 봐야 할 접근 방식, 조인 방식, 예상 비용, 실제 처리량의 의미를 정리합니다.

출제 빈도 ★★★☆☆ 관련 문제 2개 | 실행 계획CostCardinality

분석 도구의 목적

SQL 분석 도구는 “이 SQL이 왜 느린가”를 추측이 아니라 근거로 확인하게 해줍니다. 핵심 자료는 실행 계획과 실제 실행 통계입니다.

실행 계획은 DBMS가 선택한 접근 경로를 보여줍니다. 다만 예상 정보만으로는 부족할 수 있으므로 실제 실행 후의 처리 건수와 읽은 블록 수를 함께 보는 습관이 필요합니다.

실행 계획에서 먼저 볼 것

항목질문
접근 방식테이블을 전체 스캔하는가, 인덱스를 사용하는가
조인 순서어느 테이블을 먼저 읽는가
조인 방식NL, Hash, Sort Merge 중 무엇인가
예상 건수옵티마이저가 몇 행으로 예상했는가
정렬 여부불필요한 SORT, ORDER BY, GROUP BY 비용이 있는가

예상과 실제가 다르면 주의가 필요하다

옵티마이저는 통계 정보를 바탕으로 예상합니다. 예상 행 수가 실제와 크게 다르면 잘못된 실행 계획을 고를 수 있습니다.

예를 들어 옵티마이저가 어떤 조건 결과를 10행으로 예상했는데 실제는 100만 행이라면, 인덱스 반복 접근이나 NL 조인을 골라 크게 느려질 수 있습니다.

대표 확인 방법

도구 이름과 문법은 DBMS마다 다르지만 목적은 비슷합니다.

분석 대상확인 내용
실행 계획선택된 접근 경로와 조인 방식
실제 실행 통계실제 행 수, 블록 읽기, 메모리·디스크 사용
대기 이벤트CPU가 아닌 잠금, I/O, 네트워크 대기 여부
SQL 수행 이력자주 실행되고 총 비용이 큰 SQL

실행 계획을 읽는 순서

  1. 가장 많이 읽는 테이블이 무엇인지 봅니다.
  2. 조건절이 인덱스를 사용할 수 있는 형태인지 확인합니다.
  3. 조인 순서가 작은 결과부터 시작하는지 봅니다.
  4. 예상 행 수와 실제 행 수 차이를 확인합니다.
  5. 정렬, 해시, 임시 공간 사용이 과도한지 확인합니다.

흔한 오해

비용 숫자가 낮다고 항상 빠른 SQL은 아닙니다. 비용은 옵티마이저의 예상치입니다. 통계가 부정확하거나 조건 값의 분포가 치우쳐 있으면 예상이 틀릴 수 있습니다.

또한 인덱스를 사용한다고 항상 좋은 것도 아닙니다. 결과가 테이블 대부분이면 인덱스를 타고 많은 행을 반복 접근하는 것보다 전체 스캔이 더 빠를 수 있습니다.

한 문장 요약

실행 계획은 선택된 길이고, 실제 실행 통계는 그 길이 정말 빨랐는지 보여주는 증거입니다.