Topic

인덱스 선택 지침(Index Selection Guide)

JackerLab 2025. 4. 20. 19:34
728x90
반응형

개요

인덱스는 SQL 성능을 좌우하는 가장 강력한 도구 중 하나입니다. 그러나 인덱스는 '많이 만든다고 좋은 것'이 아닌, '잘 만들어야 의미 있는 것'입니다. 잘못된 인덱스는 오히려 성능 저하와 리소스 낭비를 초래할 수 있습니다. 본 포스트에서는 실무 관점에서 효율적인 인덱스 설계를 위한 선택 지침과 전략을 상세히 안내합니다.


1. 인덱스 설계의 기본 원칙

원칙 설명 이유
최소화 꼭 필요한 컬럼에만 생성 과다 인덱스는 쓰기 성능 저하 유발
자주 쓰는 조건 위주 WHERE, JOIN, ORDER BY 대상 컬럼 쿼리 효율 극대화 가능
카디널리티 고려 중복률 낮은 컬럼 중심 설계 인덱스 선택 가능성 ↑
커버링 인덱스 활용 SELECT 컬럼 포함한 인덱스 구성 테이블 액세스 생략 가능
복합 인덱스 순서 고려 조건절에서 앞 컬럼 사용 빈도 우선 옵티마이저 탐색 효율 ↑

정확한 인덱스 설계는 쿼리 성능을 수십 배 향상시킬 수 있습니다.


2. 인덱스 설계 체크리스트

항목 체크 기준 설명
조건 컬럼 여부 WHERE 조건에 포함 여부 필터링 용도 인덱스 적합
정렬 사용 여부 ORDER BY 대상인지 확인 인덱스를 통한 정렬 가능 여부 판단
결합 조건 유무 JOIN에 사용되는 컬럼인지 확인 조인 성능 개선에 기여
컬럼 카디널리티 데이터 중복률 확인 낮을수록 인덱스 효율 ↑
변경 빈도 INSERT/UPDATE 비율 확인 자주 변경되는 컬럼은 인덱스 신중

AWR, SQL Trace, V$SQL 등을 활용한 분석 기반 접근이 중요합니다.


3. 인덱스 설계 예외 사항

예외 설명 이유
자주 업데이트되는 컬럼 인덱스 유지 비용 큼 DML 성능 저하 가능성 존재
NULL 값이 많은 컬럼 일반 인덱스는 NULL에 비효율 함수 인덱스 등 대안 고려
지나치게 짧거나 긴 컬럼 지나치게 작은/큰 값은 효율 저하 해시 충돌, 디스크 낭비 등 고려
소규모 테이블 풀 스캔이 더 빠를 수 있음 옵티마이저가 인덱스 무시 가능

인덱스는 무조건 적용이 아닌 '선택과 집중'이 핵심입니다.


4. 실무 인덱스 설계 전략

전략 설명 적용 방법
커버링 인덱스 SELECT 컬럼 + WHERE 컬럼 포함 테이블 접근 없이 인덱스로 결과 반환 가능
선행 컬럼 정렬 자주 쓰는 조건 컬럼을 인덱스 앞에 배치 복합 인덱스 효율 최대화
히스토그램 활용 데이터 분포 왜곡 보완 옵티마이저 정확도 향상
함수 기반 인덱스 변형된 컬럼 조건 대응 UPPER(name) 등에 효과적

복합 인덱스의 경우 '조건에 포함되는 컬럼 순서'가 핵심 변수입니다.


5. 결론

인덱스는 단순히 생성만으로 효과를 얻기 어려우며, 쿼리 패턴과 데이터 특성을 고려한 정밀한 설계가 중요합니다. 특히 인덱스가 너무 많거나 잘못된 컬럼에 설정되면 오히려 전체 시스템에 악영향을 줄 수 있습니다. 효율적인 인덱스 관리는 성능 튜닝의 핵심이며, 주기적인 검토와 리팩토링을 통해 최적의 상태를 유지해야 합니다.

728x90
반응형

'Topic' 카테고리의 다른 글

커버링 인덱스(Covering Index)  (0) 2025.04.20
인덱스 스캔(Index Scan)  (0) 2025.04.20
인덱스(Index)  (0) 2025.04.20
SQL 힌트(Hint)  (0) 2025.04.20
Stored Procedure vs Procedure  (1) 2025.04.20