실행 계획 연산자 읽기
실행 계획에 자주 등장하는 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는 정렬이나 해시 작업을 만들 수 있습니다. 결과가 크면 메모리 부족으로 임시 공간을 사용할 수 있어 비용이 커집니다.
실행 계획 읽기 순서
- 어떤 테이블을 먼저 읽는지 확인합니다.
- 각 테이블 접근이 전체 스캔인지 인덱스 접근인지 봅니다.
- 조인 방식과 조인 순서를 확인합니다.
- 정렬이나 중복 제거가 불필요하게 발생하는지 봅니다.
- 예상 행 수가 급격히 커지는 지점을 찾습니다.
한 문장 요약
실행 계획 연산자는 DBMS가 데이터를 읽고, 줄이고, 붙이고, 정렬하는 실제 작업 순서입니다.