Topic

커버링 인덱스(Covering Index)

JackerLab 2025. 4. 20. 21:35
728x90
반응형

개요

커버링 인덱스(Covering Index)는 SQL 실행 시 필요한 컬럼들이 모두 인덱스에 포함되어 있어, 테이블 액세스 없이 인덱스만으로 결과를 반환할 수 있는 고성능 인덱스 설계 기법입니다. 특히 대용량 테이블에서 응답 속도를 향상시키고 I/O를 획기적으로 줄일 수 있어 성능 튜닝의 강력한 도구로 활용됩니다. 본 포스트에서는 커버링 인덱스의 개념, 작동 원리, 장단점, 실무 적용 전략 등을 다룹니다.


1. 개념 및 정의

항목 설명
정의 SELECT 절에서 필요한 모든 컬럼이 인덱스에 포함된 상태
목적 테이블 액세스 생략 → 디스크 I/O 최소화
적용 조건 WHERE, SELECT, ORDER BY 컬럼이 모두 인덱스 포함 시 적용 가능

커버링 인덱스를 활용하면 TABLE ACCESS BY INDEX ROWID 단계가 생략되어 성능 향상에 직결됩니다.


2. 작동 원리와 실행 계획

단계 일반 인덱스 커버링 인덱스
1 인덱스에서 조건 만족하는 ROWID 찾음 인덱스에서 조건 및 SELECT 컬럼 모두 탐색
2 ROWID로 테이블 접근 테이블 접근 생략
3 테이블에서 SELECT 컬럼 조회 결과 바로 반환

실행 계획에서는 INDEX FAST FULL SCAN 또는 INDEX FULL SCAN 단독으로 테이블 액세스가 나타나지 않음.


3. 예시

-- 일반 인덱스 사용 예시
SELECT name FROM employees WHERE department_id = 10;

-- 커버링 인덱스 설계
CREATE INDEX emp_idx_cover ON employees(department_id, name);

-- 실행 시 테이블 접근 없이 인덱스만으로 처리 가능

인덱스에 SELECT 컬럼까지 포함되어야 "Covering" 조건이 충족됩니다.


4. 장단점 비교

구분 장점 단점
성능 테이블 액세스 생략으로 I/O 절감 인덱스 크기 증가 가능성
튜닝 효과 특정 쿼리에 최적화된 응답 시간 제공 INSERT/UPDATE 성능 저하 가능
저장공간 디스크 접근 감소 인덱스가 너무 많아지면 공간 낭비

효과적인 성능 향상을 위해 "핵심 조회 쿼리 대상" 위주로 제한적 적용이 권장됩니다.


5. 실무 적용 전략

전략 설명
쿼리 패턴 분석 SELECT 및 WHERE 컬럼 고정 패턴일 때 설계 BI 보고서, 대시보드 쿼리 등 정형 쿼리 대상
다중 인덱스 대비 비교 테이블 접근과 I/O 비교 후 설계 판단 EXPLAIN PLAN, AUTOTRACE 필수
복합 인덱스 활용 WHERE → SELECT → ORDER 순으로 컬럼 구성 옵티마이저 선호도 상승
OLTP 환경 주의 DML이 많은 환경에서는 과도한 커버링 인덱스는 역효과 OLAP 중심에서 활용 권장

커버링 인덱스는 적절한 설계 범위와 대상 테이블에 대한 이해가 필수입니다.


6. 결론

커버링 인덱스는 단일 인덱스만으로 데이터 조건과 결과를 모두 처리할 수 있는 고성능 튜닝 수단입니다. 테이블 액세스를 생략함으로써 응답 속도를 비약적으로 향상시킬 수 있으며, 특히 정형화된 쿼리나 분석성 쿼리에 효과적입니다. 다만 인덱스 설계 시 저장공간과 DML 비용을 함께 고려한 전략적 접근이 필요합니다.

728x90
반응형