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

SQL 고급활용 및 튜닝 · 실행 계획 연산자 23 / 32

실행 계획 연산자 읽기

실행 계획에 자주 등장하는 TABLE ACCESS, INDEX SCAN, SORT, HASH, NESTED LOOPS 같은 연산자를 초보자용으로 정리합니다.

출제 빈도 ★★★★ 관련 문제 5개 | TABLE ACCESSINDEX SCANHASHNESTED LOOPS

실행 계획은 연산자의 조합입니다

실행 계획은 DBMS가 SQL을 처리하기 위해 선택한 작업 목록입니다. 각 줄은 “테이블 읽기”, “인덱스 탐색”, “정렬”, “조인” 같은 연산을 의미합니다.

시험이나 실무에서 실행 계획을 볼 때는 세부 숫자보다 먼저 연산자의 의미를 읽어야 합니다.

접근 연산자

연산자의미판단 기준
TABLE ACCESS FULL테이블 전체 읽기대량 조회면 자연스러울 수 있음
TABLE ACCESS BY INDEX ROWID인덱스로 찾은 ROWID로 테이블 접근인덱스 후 테이블 방문
INDEX UNIQUE SCAN유일 인덱스에서 한 건 탐색기본키 조건에서 자주 발생
INDEX RANGE SCAN인덱스 일부 구간 탐색범위 조건, 비유일 조건
INDEX FULL SCAN인덱스 전체를 순서대로 읽음정렬 대체 가능성

FULL이라는 단어가 항상 나쁜 것은 아닙니다. 테이블 대부분을 읽어야 하는데 인덱스를 반복해서 타면 더 느릴 수 있습니다.

조인 연산자

연산자의미유리한 상황
NESTED LOOPS바깥 행마다 안쪽을 반복 탐색소량 결과, 안쪽 인덱스
HASH JOIN작은 쪽 해시 테이블 생성 후 매칭대용량 등가 조인
MERGE JOIN정렬된 양쪽을 병합정렬된 데이터, 범위 조인

조인 방식은 데이터 양과 인덱스에 따라 달라집니다. 실행 계획에서 조인 방식만 보고 좋고 나쁨을 단정하지 말고, 앞 단계에서 얼마나 많은 행이 들어오는지 함께 봐야 합니다.

정렬과 집계 연산자

연산자의미
SORT ORDER BY최종 정렬
SORT GROUP BY그룹화를 위한 정렬
HASH GROUP BY해시 기반 그룹화
SORT UNIQUE중복 제거

DISTINCT, UNION, GROUP BY, ORDER BY는 정렬이나 해시 작업을 만들 수 있습니다. 결과가 크면 메모리 부족으로 임시 공간을 사용할 수 있어 비용이 커집니다.

실행 계획 읽기 순서

  1. 어떤 테이블을 먼저 읽는지 확인합니다.
  2. 각 테이블 접근이 전체 스캔인지 인덱스 접근인지 봅니다.
  3. 조인 방식과 조인 순서를 확인합니다.
  4. 정렬이나 중복 제거가 불필요하게 발생하는지 봅니다.
  5. 예상 행 수가 급격히 커지는 지점을 찾습니다.

한 문장 요약

실행 계획 연산자는 DBMS가 데이터를 읽고, 줄이고, 붙이고, 정렬하는 실제 작업 순서입니다.