1. 파티션 개요
2. 파티션 유형
3. 파티션 Pruning
4. 인덱스 파티셔닝
h3, 가) 파티션 목적
관리적 측면 | 파티션 단위 백업, 추가, 삭제, 변경 |
성능적 측면 | 파티션 단위 조회 및 DML 수행, 경합 및 부하 분산 |
아래는 Oracle이 지원하는 파티션 유형
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 ) -- 주문일자 >= '20100401'
)
;
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 )
)
;
1 | 파일 그룹을 생성(선택) |
2 | 파일을 파일 그룹에 추가(선택) |
3 | 파티션 함수(Partition Function)를 생성(필수) -> 분할 방법과 경계 값을 지정 |
4 | 파티션 구성표(Partition Schema)를 생성(필수) -> 파티션 함수에서 정의한 각 파티션의 위치(파일 그룹)를 지정 |
5 | 파티션 테이블을 생성 -> 파티션 하고자 하는 테이블을 파티션 구성표에 생성 |
SELECT *
FROM SALES_RANGE
WHERE SALES_DATE >= '20060301'
AND SALES_DATE <= '20060401'
;
----------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 80 | 25440 | 3443K (1)| 11:28:41 | | |
| 1 | PARTITION RANGE ITERATOR| | 80 | 25440 | 3443K (1)| 11:28:41 | 40 | 41 |
| 2 | TABLE ACCESS FULL | SALES_RANGE | 80 | 25440 | 3443K (1)| 11:28:41 | 40 | 41 |
----------------------------------------------------------------------------------------------------------------------
SELECT *
FROM SALES_RANGE
WHERE SALES_DATE >= :1
AND SALES_DATE <= :2
;
-----------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5719K| 1734M| 105M (1)|350:45:20 | | |
|* 1 | FILTER | | | | | | | |
| 2 | PARTITION RANGE ITERATOR| | 5719K| 1734M| 105M (1)|350:45:20 | KEY | KEY |
|* 3 | TABLE ACCESS FULL | SALES_RANGE | 5719K| 1734M| 105M (1)|350:45:20 | KEY | KEY |
-----------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(TO_DATE(:1)<TO_DATE(:2))
3 - filter("SALES_DATE">=:1 AND "SALES_DATE"<:2)