728x90
반응형
개요
SQL 실행 계획에서 인덱스는 단순한 검색 보조 수단이 아닌, 데이터 접근 효율을 극대화하는 핵심 전략입니다. 그중에서도 인덱스 스캔(Index Scan)은 옵티마이저가 테이블 데이터를 읽는 방식을 결정할 때 주요하게 고려하는 요소입니다. 본 포스트에서는 인덱스 스캔의 개념, 유형, 작동 원리, 실행 계획 분석 방법 등을 체계적으로 설명합니다.
1. 개념 및 정의
항목 | 설명 |
정의 | 인덱스를 사용하여 테이블의 데이터를 직접 조회하거나 데이터의 위치를 찾는 접근 방식 |
목적 | 불필요한 Full Table Scan을 줄이고 I/O 성능 향상 |
기반 구조 | B-Tree 또는 Bitmap 구조의 인덱스 활용 |
인덱스 스캔은 WHERE 조건, 정렬, 조인 시 빠른 데이터 위치 탐색을 가능하게 합니다.
2. 인덱스 스캔의 주요 유형
유형 | 설명 | 적용 예시 |
Index Unique Scan | 유일 인덱스를 통해 단 하나의 레코드만 조회 | PK 또는 UNIQUE 조건 검색 |
Index Range Scan | 범위 조건에 해당하는 다수의 레코드 조회 | BETWEEN, >=, <= 조건 등 |
Index Full Scan | 인덱스 전체를 정렬 순서대로 스캔 | 인덱스만으로 결과 제공 가능 (커버링 인덱스) |
Index Fast Full Scan | 인덱스 전체를 순서 무시하고 병렬 처리로 스캔 | COUNT 집계, 인덱스 컬럼만 SELECT 시 |
Index Skip Scan | 선두 컬럼 없이 복합 인덱스 일부 조건으로 탐색 | 다중 파티션이나 인덱스 재사용 상황 |
각 유형은 데이터 특성, 조건절, 인덱스 구조에 따라 옵티마이저가 자동 선택합니다.
3. 작동 방식과 흐름
단계 | 설명 | 특징 |
1 | 옵티마이저가 SQL 분석 후 인덱스 스캔 가능성 판단 | 통계 기반 예측 |
2 | 인덱스에서 해당 조건에 맞는 엔트리 탐색 | 조건 컬럼 활용 |
3 | 필요시 ROWID를 통해 테이블 데이터 접근 | 테이블 액세스 (TABLE ACCESS BY INDEX ROWID) 수행 |
4 | 결과 반환 | Fetch 또는 Join으로 전달됨 |
실행 계획(Execution Plan)에서 INDEX UNIQUE SCAN, INDEX RANGE SCAN 등의 항목으로 확인 가능.
4. 실행 계획 분석법
도구 | 설명 | 활용 |
EXPLAIN PLAN | 실행 계획 확인 도구 | 각 단계의 접근 방식 확인 가능 |
AUTOTRACE | SQLPlus 등에서 실행 시 접근 방식과 통계 표시 | 예상 vs 실제 비교 가능 |
V$SQL_PLAN | Oracle 내부 뷰로 SQL별 실행 계획 분석 | AWR, SQL ID 기반 튜닝 자료 확보 |
Index Scan이 발생했더라도 테이블 액세스를 최소화하는 구조인지 여부 확인 필요.
5. 실무 적용 전략
전략 | 설명 | 기대 효과 |
커버링 인덱스 활용 | SELECT 컬럼이 모두 인덱스에 포함되도록 설계 | 테이블 접근 생략, I/O 절감 |
조건절 최적화 | WHERE 조건이 인덱스 사용 유도하도록 구성 | Index Range Scan 유도 |
힌트 활용 | 필요 시 옵티마이저 유도 (INDEX, INDEX_FFS) | 특정 인덱스 강제 선택 가능 |
통계 최신화 | DB 통계 갱신으로 정확한 계획 도출 유도 | 잘못된 Full Scan 회피 가능 |
인덱스 스캔은 잘 설계된 인덱스와 SQL 패턴이 전제될 때 최대 효과를 발휘합니다.
6. 결론
인덱스 스캔은 SQL 성능 튜닝의 출발점이자 실행 계획 분석의 핵심 포인트입니다. 단순히 인덱스를 만든다고 해서 자동으로 Index Scan이 발생하는 것이 아니라, 조건절 구조와 인덱스 설계, 통계 정확도 등이 조화를 이뤄야 합니다. 실무에서는 스캔 유형별 차이를 이해하고, 실행 계획을 기반으로 한 데이터 접근 전략 수립이 중요합니다.
728x90
반응형
'Topic' 카테고리의 다른 글
정적 인덱싱(Static Indexing) vs 동적 인덱싱(Dynamic Indexing) (0) | 2025.04.20 |
---|---|
커버링 인덱스(Covering Index) (0) | 2025.04.20 |
인덱스 선택 지침(Index Selection Guide) (0) | 2025.04.20 |
인덱스(Index) (0) | 2025.04.20 |
SQL 힌트(Hint) (0) | 2025.04.20 |