185. 전역 인덱스 (Global Index) vs 지역 인덱스 (Local Index)
핵심 인사이트: 책을 3권의 백과사전(파티션)으로 나눴다고 치자. 3권 전체의 단어를 모아서 커다란 색인(인덱스) 책 1권을 따로 만들면 '전역 인덱스'고, 1권 맨 뒤에는 1권 색인, 2권 맨 뒤에는 2권 색인을 각각 달아놓으면 '지역 인덱스'다. 대용량 파티셔닝 환경에서는 관리가 편한 '지역 인덱스'가 압도적인 승자다.
Ⅰ. 파티션 인덱스 (Partitioned Index)의 개념
대용량 테이블을 파티셔닝(Partitioning)으로 쪼개었을 때, 그 테이블에 걸려있는 인덱스(Index) 구조를 어떻게 가져갈 것인가에 대한 전략입니다. 인덱스가 파티션 테이블 전체를 하나로 통합하여 가리키는지(Global), 아니면 각 테이블 파티션과 정확히 1:1로 매핑되어 쪼개져 있는지(Local)에 따라 나뉩니다.
Ⅱ. 전역 인덱스와 지역 인덱스 비교
[ 테이블 파티션: 2023년 / 2024년 / 2025년 ]
1. Global Index (전역 인덱스 - 하나의 거대한 통 인덱스)
┌─────────────── 인덱스 나무 (B-Tree) ───────────────┐
│ 2023년 데이터 위치 ─▶ [2023년 파티션] │
│ 2024년 데이터 위치 ─▶ [2024년 파티션] │
│ 2025년 데이터 위치 ─▶ [2025년 파티션] │
└────────────────────────────────────────────────────┘
2. Local Index (지역 인덱스 - 파티션마다 1:1로 잘린 미니 인덱스들)
[2023년 파티션] ◀── [2023년 전용 미니 인덱스]
[2024년 파티션] ◀── [2024년 전용 미니 인덱스]
[2025년 파티션] ◀── [2025년 전용 미니 인덱스]
| 구분 | 전역 인덱스 (Global Index) | 지역 인덱스 (Local Index) |
|---|---|---|
| 독립성 | 인덱스와 테이블 파티션이 1:N 구조 (독립성 없음) | 인덱스와 테이블 파티션이 완벽한 1:1 구조 (독립성 보장) |
| 파티션 Drop 관리 | (치명적 단점) 옛날 2023년 파티션을 DROP하면, 전체 Global 인덱스가 깨져서 사용 불능(Unusable) 상태가 됩니다. 인덱스를 전체 리빌드(Rebuild)해야 합니다. | 2023년 파티션을 지우면 해당 년도의 미니 인덱스만 같이 삭제되므로, 다른 연도 인덱스는 100% 정상 작동합니다. |
| 활용도 | 파티션 키와 무관한 컬럼으로 유니크(Unique / PK) 제약을 걸어야 할 때만 어쩔 수 없이 씁니다. | 파티션 테이블을 설계할 때 무조건 Local Index를 생성하는 것이 실무의 99% 원칙입니다. |
Ⅲ. 인덱스 파티셔닝 전략 요약
- 파티션 테이블에는 가급적 지역(Local) 인덱스를 생성하라. 관리가 예술적으로 편해진다.
- 테이블 파티션 키가 아닌 컬럼에
Primary Key나Unique를 잡아야 한다면, 오라클의 구조적 제약 때문에 어쩔 수 없이 전역(Global) 인덱스를 써야만 한다.
📢 섹션 요약 비유: 서랍장(테이블)을 1월, 2월, 3월로 칸막이(파티션)를 쳐서 나누어 놨습니다. 전역 인덱스는 포스트잇(인덱스)을 서랍장 바깥쪽 거대한 문짝 하나에 다닥다닥 붙여놓은 것이고, 지역 인덱스는 1월 서랍을 열면 1월 포스트잇만 그 안에 예쁘게 붙어있는 것입니다. 1월 서랍을 통째로 버릴 때 바깥 문짝의 포스트잇(전역)은 다 떨어져서 엉망이 되지만, 서랍 안의 포스트잇(지역)은 같이 깔끔하게 버려집니다.