" 인덱스 만으로 충분한데, 관리적 측면을 제외하고 성능적 측면에서 파티션이 필요할까요?"
라는 질문을 시작으로 테이블 랜덤 엑세스가 성능에 미치는 영향을 알아 보자.
인덱스로 스캔하는데 왜 느릴까?
select * from 고객 where 지역 = '서울';
Execution Plan
-----------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS
1 0 TABLE ACCESS BY INDEX ROWID OF '고객' (TABLE) <-인덱스를 스캔한 후에 테이블을 반드시 스캔!
2 1 INDEX RANGE SCAN OF '고객_지역_IDX' (INDEX)
"오라클은 테이블 블록이 수시로 버퍼캐시에 밀려 났다가 다시 캐싱되며, 그때마다 따른 공간에 캐싱되기 때문에 인덱스에서 포인터로 직접 연결할 수 없는 구조로 이루어져 있다. 메모리 주소 정보가 아닌 디스크 주소 정보를 이용해 해시 알고리즘으로 버퍼 블록을 찾아간다."
결론: 일반 DBMS 에서 인덱스 ROWID를 이용한 테이블 엑세스가 생각만큼 빠르지 않다.
그렇기 때문에 파티션 Pruning 을 사용한다.

클러스터링 팩터가 가장 종은 예
이 상태에서 마침 '직전과 같은' 테이블 블록을 가리킨다면, 래치 획득과 해시체인스캔과정을 생략하고 바로 테이블 블록을 읽을 수있다.(논리적 블록 I/O 과정 생략가능)
