파티션 장점.
관리적 측면 : 파티션 단위 백업, 추가, 삭제, 변경
성능적 측면 : 파티션 단위 조회 및 DML 수행, 경합 및 부하 분산
파티션유형 | 단일 파티셔닝 | + HASH | + LIST | +RANGE |
---|---|---|---|---|
RANGE | 8이상 | 8i이상 | 9i이상 | 11g이상 |
HASH | 8i이상 | X | X | X |
LIST | 9i이상 | 11g이상 | 11g이상 | 11g이상 |
-- ORACLE : Range partition
create table 주문 ( 주문번호 number, 주문일자 varchar2(8), 고객id varchar2(5), )
partition by range(주문일자) (
partition p2009_q1 values less than ('20090401') ,
partition p2009_q2 values less than ('20090701') ,
partition p2009_q3 values less than ('20091001') ,
partition p2009_q4 values less than ('20100101') ,
partition p2010_q1 values less than ('20100401') ,
partition p9999_mx values less than ( MAXVALUE )
) ;
-- ORACLE : Range + HASH Partition
create table 주문 ( 주문번호 number, 주문일자 varchar2(8), 고객id varchar2(5), )
partition by range(주문일자)
subpartition by hash(고객id) subpartitions 8
( partition p2009_q1 values less than('20090401') ,
partition p2009_q2 values less than('20090701') ,
partition p2009_q3 values less than('20091001') ,
partition p2009_q4 values less than('20100101') ,
partition p2010_q1 values less than('20100401') ,
partition p9999_mx values less than( MAXVALUE )
) ;
-- 자세한건 Online 설명서 참조 바란다.라고 함.
1. 파일 그룹을 생성한다(선택).
2. 파일을 파일 그룹에 추가한다(선택).
3. 파티션 함수(Partition Function)를 생성한다(필수).
→ 분할 방법과 경계 값을 지정
4. 파티션 구성표(Partition Schema)를 생성한다(필수).
→ 파티션 함수에서 정의한 각 파티션의 위치(파일 그룹)를 지정
5. 파티션 테이블을 생성한다.
→ 파티션 하고자 하는 테이블을 파티션 구성표에 생성한다.
--액세스할 파티션을 컴파일 시점(Compile-Time)에 미리 결정하며, 파티션 키 칼럼을 상수 조건으로 조회하는 경우에 작동한다.
select * from sales_range where sales_date >= '20060301' and sales_date <= '20060401'
-----------------------------------------------------------
| Id | Operation | Name |Pstart| Pstop |
-----------------------------------------------------------
| 0 | SELECT STATEMENT | | | |
| 1 | PARTITION RANGE ITERATOR | | 3 | 4 |
|* 2 | TABLE ACCESS FULL | SALES_RANGE | 3 | 4 |
----------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------------
2 - filter("SALES_DATE">='20060301' AND "SALES_DATE"<='20060401')
-- 액세스할 파티션을 실행 시점(Run-Time)에 결정하며, 파티션 키 칼럼을 바인드 변수로 조회하는 경우가 대표적이다. NL Join할 때도 Inner 테이블이 조인 칼럼 기준으로 파티셔닝 돼 있으면 동적 Pruning이 작동한다.
select * from sales_range where sales_date >= :a and sales_date <= :b
----------------------------------------------------------------------
| Id | Operation | Name | Pstart | Pstop |
----------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | |
|*1 | FILTER | | | |
| 2 | PARTITION RANGE ITERATOR | | KEY | KEY |
|*3 | TABLE ACCESS FULL | SALES_RANGE | KEY | KEY |
----------------------------------------------------------------------
Predicate Information (identified by operation id):
----------------------------------------------------------------------
1 - filter(:A<=:B)
3 - filter("SALES_DATE">=:A AND "SALES_DATE"<=:B)
Prefixed | Non-prefixed | |
---|---|---|
Local | 1 | 2 |
Global | 3 | 4 |
구분 | 적용기준 및 고려사항 |
---|---|
비파티션 |
|
Global Prefixed |
|
Local Prefixed |
|
Local Non Prefixed |
|
- 강좌 URL : http://www.gurubee.net/lecture/2411
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.