파티션 테이블은 일반적인 테이블에서 사용하는 인덱스로는 사용이 힘들다. 파티션 테이블의 특성상 새로운 세그먼트를 계속해서 생성하여 테이블을 계속 나뉘어야 하지만 인덱스는 나눌 수가 없기 때문이다. 때문에 파티션 데이블에는 다른 방식으로 인덱스를 걸어줘야 한다. 오라클에서는 파티션 데이블에 인덱스를 거는 두 가지 방식이 있다. 바로 로컬 인덱스와 글로벌 인덱스이다.
로컬 인덱스
파티션 테이블에서 사용하는 가장 일반적인 INDEX 생성 방법으로 테이블과 인덱스가 동일하게 파티션 된 경우를 말한다. 로컬 인덱스는 테이블 파티션 키 컬럼을 똑같이 인덱스로 구성한다. 예를 들어 파티션이 10개라면 인덱스도 똑같이 10개가 된다. 로컬 파티션 인덱스의 경우에 테이블의 파티션 구조가 바뀐다거나 파티션이 삭제가 된다고 하더라도 인덱스 재생성이 필요가 없어 오라클에서 알아서 자동으로 관리를 해주기 때문에 관리측면에서 유리한 측면이 있다.
글로벌 인덱스
글로벌 인덱스는 파티션 테이블로 이루어져 있는 테이블에 하나의 인덱스가 여러 개의 테이블 파티션과 매핑된다. 글로벌 인덱스는 파티션 키 컬럼을 인덱스로 지정해주어야 하는 로컬 인덱스와는 달리 다른 칼럼들도 자유롭게 인덱스를 걸 수 있다는 장점이 있다.
파티션 테이블의 인덱스를 구성할 수 있는 두가지 방법인 로컬 인덱스, 글로벌 인덱스 위 두 가지 방식 중 로컬 파티션 인덱스를 압도적으로 많이 사용한다. 그 이유는 로컬 인덱스가 관리가 편하기 때문이다. 예를 들어 로그를 저장하는 테이블을 파티션 테이블로 만들었다고 했을 때, 시간이 지나 로그의 보관 의무시간이 종료되어 필요 없는 데이터들을 제거했다고 하며. 이때 파티션 DROP을 수행하게 될 텐데 글로벌 인덱스로 구성되어 있다면 필요 없는 테이블 파티션을 DROP 한 뒤에 인덱스가 깨진다. 이렇게 인덱스가 깨져버리면 Invaild 상태가 되고 이 인덱스를 다시 사용하기 위해서는 인덱스 리빌딩 작업을 다시 해줘야 하는 등 번거로움이 존재한다. 하지만 로컬 인덱스로 구축하였다면 전혀 문제가 발생하지 않는다. 로컬 인덱스 각각의 파티션마다 하나씩 걸려 있기 때문에 파티션을 DROP 할 때 함께 제거되고 남아있는 파티션에는 전혀 지장이 없기 때문이다.
'DB' 카테고리의 다른 글
클러스터 인덱스 vs 넌클러스터 인덱스 (0) | 2022.12.19 |
---|---|
옵티마이저 (0) | 2022.12.19 |