Oracle 데이터베이스에서 파티션 테이블(partitioned table) 은 대용량 데이터를 효율적으로 관리할 수 있도록 설계되어 있습니다. 이 때 로컬 인덱스(local index) 는 파티션 단위로 관리되는 인덱스로 유지보수에는 유리하지만, 글로벌 인덱스(global index) 는 전체 테이블 범위에서 인덱싱되기 때문에 복잡한 쿼리 성능을 높이거나 조인 최적화에 유리한 경우가 많습니다.
이 문서에서는 Oracle에서 로컬 인덱스를 글로벌 인덱스로 변경하는 방법을 단계별로 설명하며, DML 작업, 쿼리 최적화, 유지보수 관점에서 고려할 점도 함께 안내합니다.
🛠️ 변경 방법 요약 (Local Index → Global Index)
1. 기존 인덱스 확인
다음 SQL을 통해 로컬 인덱스인지 확인합니다
SELECT index_name, partitioned, index_type
FROM user_indexes
WHERE table_name = 'YOUR_TABLE_NAME';
- PARTITIONED = 'YES' + INDEX_TYPE = 'NORMAL'이면 로컬 인덱스입니다.
2. 로컬 인덱스 삭제
기존 로컬 인덱스를 삭제합니다
DROP INDEX your_local_index_name;
3. 글로벌 인덱스 생성
글로벌 인덱스는 다음과 같이 생성합니다
CREATE INDEX your_global_index_name
ON your_partitioned_table(column1, column2, ...)
GLOBAL;
옵션 예시
CREATE INDEX emp_dept_global_idx
ON employees(department_id, hire_date)
GLOBAL
TABLESPACE users
ONLINE;
⚠️ 주의사항 및 팁
- 파티션 작업(DROP/TRUNCATE) 시 글로벌 인덱스는 UNUSABLE 상태가 될 수 있으므로, 이후 반드시 REBUILD가 필요합니다
ALTER INDEX your_global_index_name REBUILD;
- 글로벌 인덱스는 쿼리 성능을 높일 수 있지만, 파티션 기반 유지보수에는 불리할 수 있으니 쿼리 성능 계획(EXPLAIN PLAN) 을 사전 확인하세요.
- 테스트 환경에서 먼저 검증한 후 운영 환경에 적용하는 것이 좋습니다.
Oracle의 로컬 인덱스를 글로벌 인덱스로 변경하는 것은 단순한 인덱스 변경 이상의 의미를 가집니다. 데이터 액세스 패턴, 쿼리 성능, 유지보수 전략을 종합적으로 고려해 결정해야 하며, 변경 시에는 글로벌 인덱스의 특성과 제약을 잘 이해해야 합니다. 이 가이드를 따라 안정적으로 인덱스를 마이그레이션해 보세요.