반응형
1. Global Index
✅ 특징
- 테이블 전체에 걸쳐 하나의 인덱스만 존재
- 파티션과 관계없이 데이터를 정렬하고 관리
- 범용적인 검색 속도는 빠르지만, DML(INSERT, UPDATE, DELETE) 작업 시 성능 저하 가능성 있음
✅ 장점
✔ 범위 검색(테이블 전체 조회)이 빠름
- 여러 파티션을 넘나드는 검색(예: 특정 사용자 ID 조회)이 필요할 때 성능이 좋음✔ WHERE 조건에 특정 컬럼만 사용해도 효율적
- WHERE user_id = ? 같은 조건에서 특정 파티션을 찾을 필요 없이 바로 검색 가능
✅ 단점
❌ DML 작업 시 인덱스 재구성 필요
- 특정 파티션만 변경해도 전체 인덱스가 영향을 받음❌ 파티션 드롭(삭제) 시 인덱스 재구성 필요
- 특정 파티션을 삭제하면 전체 Global Index를 다시 만들어야 함❌ 삽입/삭제가 많을 경우 성능 저하 가능
✅ 예제 (Global Index 생성)
sql
CREATE INDEX idx_global_request ON A_requests (user_id) GLOBAL;
- user_id를 기준으로 테이블 전체에서 정렬된 인덱스가 생성됨.
- 특정 사용자 ID를 검색할 때 빠름.
2. Local Index
✅ 특징
- 각 파티션별로 개별적인 인덱스가 생성됨.
- 해당 파티션에서만 검색되며, 다른 파티션의 데이터는 인덱스가 모름.
- 파티션을 드롭(삭제)해도 해당 파티션의 인덱스만 삭제되므로 관리 용이함.
✅ 장점
✔ DML 성능이 좋음 (INSERT, UPDATE, DELETE 부담이 적음)
✔ 파티션 삭제 시 전체 인덱스에 영향 없음
✔ 파티션 범위가 명확할 경우 검색 성능이 향상됨
✅ 단점
❌ 다중 파티션을 검색할 때 성능이 떨어짐
- WHERE user_id = ? 같은 조건이 모든 파티션을 탐색해야 할 수도 있음❌ 파티션 키를 포함하지 않은 WHERE 조건에서는 비효율적
- 예: WHERE user_id = ?는 잘 작동하지 않을 수 있음
- 하지만 WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31' 처럼 파티션 키 기반 검색은 빠름
✅ 예제 (Local Index 생성)
sql
CREATE INDEX idx_local_request ON A_requests (user_id) LOCAL;
- 각 파티션별로 user_id 인덱스가 생성됨.
- 해당 파티션에서만 빠르게 검색됨.
3. Global Index vs Local Index 비교 정리
비교 항목 Global Index Local Index
인덱스 구조 | 하나의 전체 인덱스 | 파티션별 개별 인덱스 |
검색 속도 | 전체 테이블 검색 시 빠름 | 특정 파티션 검색 시 빠름 |
DML 성능 | 느림 (전체 인덱스 재구성 필요) | 빠름 (해당 파티션만 영향) |
파티션 삭제 시 영향 | 전체 인덱스 재구성 필요 | 해당 파티션의 인덱스만 삭제됨 |
적용 예시 | user_id로 전체 검색 | 날짜 기반 파티션 검색 |
추천 사용 사례 | 전체 테이블에 걸친 검색이 많을 때 | 특정 파티션에서만 검색할 때 |
4. 어떤 인덱스를 사용해야 할까?
📌 Global Index가 적합한 경우
- 사용자 ID, 계정 ID 같은 범용적인 검색이 많을 때
- 예: SELECT * FROM A_requests WHERE user_id = ?
- ✅ 장점: 범위 검색이 빠름
- ❌ 단점: DML 작업이 많으면 성능 저하 가능
📌 Local Index가 적합한 경우
- 데이터가 날짜/기간별로 파티션되어 있고, 특정 파티션만 검색할 때
- 예: SELECT * FROM A_requests WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
- ✅ 장점: DML 작업이 많아도 성능 유지
- ❌ 단점: 다중 파티션 검색 시 속도가 느려질 수 있음
5. 결론
✔ "승인 요청자가 버튼을 눌렀을 때 A → B로 넘어가는 시간이 느린 경우",
✔ "INSERT 작업만 발생하고 테이블이 파티션되어 있는 경우"
✔ "승인 요청이 특정 날짜 범위(예: created_at)에 따라 많이 검색된다면?"
➡ Local Index를 사용하는 것이 적합
✔ "승인 요청이 사용자 ID, 계정 ID 기준으로 전체 테이블 검색이 많다면?"
➡ Global Index를 사용하는 것이 적합
👉 현재 상황에 맞게 Global/Local Index를 적절히 선택하면 성능이 개선될 가능성이 높습니다! 🚀
반응형
'DB' 카테고리의 다른 글
[Database] SPOOL 개념과 사용법 (0) | 2025.03.19 |
---|---|
[Database] ORA-04030 원인,해결방법 (0) | 2025.03.19 |
[Database]Oracle XE TNS 오류 해결 방법 (TNS-12550, TNS-12560, TNS-00252) (0) | 2025.03.05 |
[Database]Oralce Shirink (0) | 2025.03.05 |
[Database] Index란? (0) | 2025.03.04 |