[SQL] 오라클 INDEX 종류와 활용법 (B-Tree, Bitmap)
1. INDEX란?
데이터베이스에서 INDEX(인덱스)는 검색 성능을 최적화하기 위해 사용되는 데이터 구조입니다.
INDEX를 적절히 사용하면 WHERE 조건, JOIN 연산, ORDER BY 등의 SQL 성능을 크게 향상시킬 수 있습니다.
2. INDEX의 기본 개념
INDEX는 테이블 내 데이터를 빠르게 조회하기 위한 **색인** 역할을 합니다.
- ✔ 테이블의 특정 컬럼에 대해 정렬된 데이터 구조를 유지
- ✔ 검색 시 전체 테이블 스캔을 방지하고, 필요한 데이터만 빠르게 찾음
- ✔ 하지만 INSERT, UPDATE, DELETE 성능이 저하될 수 있음 (INDEX 재구성 필요)
3. 오라클에서 지원하는 주요 INDEX 유형
INDEX 유형 | 설명 | 사용 예제 |
---|---|---|
B-Tree Index | 가장 일반적인 INDEX로 균형 트리 구조를 사용 | CREATE INDEX idx_emp_name ON employees(name); |
Bitmap Index | 중복 값이 많은 경우(예: 성별, 지역) 효율적 | CREATE BITMAP INDEX idx_gender ON employees(gender); |
Unique Index | 중복을 허용하지 않는 INDEX | CREATE UNIQUE INDEX idx_emp_id ON employees(emp_id); |
Function-Based Index | 컬럼 값이 변환될 경우에도 INDEX 적용 | CREATE INDEX idx_lower_name ON employees(LOWER(name)); |
4. B-Tree Index의 특징과 활용
B-Tree Index는 가장 일반적으로 사용되며, 데이터가 많고 검색이 자주 발생하는 경우 적합합니다.
✔ B-Tree Index 생성 예제
CREATE INDEX idx_emp_name ON employees(name);
✔ B-Tree Index를 활용한 검색
SELECT * FROM employees WHERE name = 'John Doe';
✅ **장점** - 빠른 검색 성능 제공 (O(log N) 시간 복잡도) - 정렬된 데이터 유지 가능
✅ **단점** - INSERT, DELETE 시 성능 저하 발생 가능 - 작은 테이블에는 오히려 성능 저하 가능
5. Bitmap Index의 특징과 활용
Bitmap Index는 중복 값이 많은 컬럼에서 성능을 극대화합니다.
✔ Bitmap Index 생성 예제
CREATE BITMAP INDEX idx_gender ON employees(gender);
✔ Bitmap Index를 활용한 검색
SELECT * FROM employees WHERE gender = 'Male';
✅ **장점** - 중복 값이 많은 경우 공간 효율적 - AND, OR 연산이 많은 경우 빠른 속도 제공
✅ **단점** - **동시 수정이 어려움** → OLTP 환경에서는 비효율적 - **자주 변경되는 컬럼에는 적합하지 않음**
6. INDEX 사용 시 주의점
- ✔ 너무 많은 INDEX는 오히려 성능을 저하시킬 수 있음
- ✔ 자주 변경되는 컬럼에는 INDEX 사용을 신중히 고려해야 함
- ✔ SELECT * 대신 필요한 컬럼만 조회하여 INDEX를 효율적으로 활용
- ✔ 실행 계획(EXPLAIN PLAN) 분석을 통해 INDEX가 실제 사용되는지 확인
📌 정리
- ✔ 오라클에서 B-Tree와 Bitmap Index는 각각 다른 목적에 사용됨
- ✔ **B-Tree Index**는 검색이 빈번한 컬럼에 적합
- ✔ **Bitmap Index**는 중복 값이 많은 컬럼에 적합 (읽기 최적화)
- ✔ INDEX를 남발하면 오히려 성능 저하가 발생할 수 있으므로 주의해야 함
🔗 다른 SQL 최적화 관련 글도 함께 확인해보세요!
'SQL & 데이터베이스 > SQL 성능 최적화 & 튜닝' 카테고리의 다른 글
SQL 인덱스(Index) 최적 활용법: 클러스터형 vs 비클러스터형 (0) | 2025.03.19 |
---|---|
[SQL 성능 최적화 & 튜닝] SQL VIEW와 MATERIALIZED VIEW 차이 및 활용법 (0) | 2025.03.17 |
[SQL] 윈도우 함수(Window Function) 개념과 활용 예제 (0) | 2025.03.13 |
[SQL] INDEX(인덱스) 개념과 성능 최적화 방법 (1) | 2025.03.12 |
[SQL] 인덱스(INDEX) 활용하여 SQL 성능 최적화하기 (0) | 2025.03.11 |