본문 바로가기

SQL & 데이터베이스/SQL 성능 최적화 & 튜닝

[SQL 성능 최적화 & 튜닝] 오라클 INDEX 종류와 활용법 (B-Tree, Bitmap)

[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 실행 계획(EXPLAIN PLAN) 분석 및 최적화 방법