카테고리 없음
Oracle List Partition
광82
2023. 9. 18. 10:54
반응형
List Partition 이란?
- Column의 특정 값으로 Partitioning을 하는 방법 입니다.
- List partition의 장점은 연관되지 않은 데이터, 순서에 맞지 않는 데이터의 grouping 을 쉽게 할 수 있습니다.
- 각 값 별로 분포도가 비슷하며, 많은 SQL에서 해당 Column의 조건이 많이 들어오는 경우 유용 합니다.
- 각 Partition의 분포도가 현격한 차이가 발생하지 않도록 해야 합니다.
- 여러 컬럼으로 partition key 생성이 가능하지 않으며 오직 하나의 column으로 구성되어야 합니다.
- Partition key 값은 NULL 값 또한 명시 가능하며, NULL 값을 포함한 어떠한 값이라도 한번만 명시할 수 있습니다.
- 대소문자를 구분 함, 범위외 문자 입력 에러 발생
List Partition 예제
① 파티션 테이블 생성
SQL> CREATE TABLE emp_list_pt
(EMPNO NUMBER NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2))
PARTITION BY LIST (JOB)
(PARTITION emp_list_pt1 VALUES ('MANAGER') TABLESPACE ASSM_TBS1,
PARTITION emp_list_pt2 VALUES ('SALESMAN') TABLESPACE ASSM_TBS2,
PARTITION emp_list_pt3 VALUES ('ANALYST') TABLESPACE ASSM_TBS3,
PARTITION emp_list_pt4 VALUES ('PRESIDENT', 'CLERK') TABLESPACE ASSM_TBS4);
② 데이터 조작
아래와 같이 데이터를 INSERT 하고 저장된 데이터를 확인해 봅니다. 테이블 생성시 지정한 분할 방식으로 저장된 것을 확인 할 수 있습니다.
INSERT INTO emp_list_pt VALUES(1, 'SMITH', 'CLERK', 7902, SYSDATE, 800, NULL, 20);
INSERT INTO emp_list_pt VALUES(2, 'ALLEN', 'SALESMAN', 7698, SYSDATE, 1600, 300, 30);
INSERT INTO emp_list_pt VALUES(3, 'WARD', 'SALESMAN', 7698, SYSDATE, 1250, 500, 30);
INSERT INTO emp_list_pt VALUES(4, 'JONES', 'MANAGER', 7839, SYSDATE, 2975, NULL, 20);
INSERT INTO emp_list_pt VALUES(5, 'MARTIN', 'SALESMAN', 7698, SYSDATE, 1250, 1400, 30);
INSERT INTO emp_list_pt VALUES(6, 'BLAKE', 'MANAGER', 7839, SYSDATE, 2850, NULL, 30);
INSERT INTO emp_list_pt VALUES(7, 'CLARK', 'MANAGER', 7839, SYSDATE, 2450, NULL, 10);
INSERT INTO emp_list_pt VALUES(8, 'SCOTT', 'ANALYST', 7566, SYSDATE, 3000, NULL, 20);
INSERT INTO emp_list_pt VALUES(9, 'KING', 'PRESIDENT', NULL, SYSDATE, 5000, NULL, 10);
INSERT INTO emp_list_pt VALUES(10, 'TURNER', 'SALESMAN', 7698,SYSDATE, 1500, 0, 30);
INSERT INTO emp_list_pt VALUES(11, 'ADAMS', 'CLERK', 7788,SYSDATE,1100,NULL,20);
INSERT INTO emp_list_pt VALUES(12, 'JAMES', 'CLERK', 7698, SYSDATE, 950, NULL, 30);
INSERT INTO emp_list_pt VALUES(13, 'FORD', 'ANALYST', 7566, SYSDATE, 3000, NULL, 20);
INSERT INTO emp_list_pt VALUES(14, 'MILLER', 'CLERK', 7782, SYSDATE, 1300, NULL, 10);
COMMIT;
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt1); --> 4,6,7
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt2); --> 2,3,5,10
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt3); --> 8,13
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt4); --> 1,9,11,12,14
③ 파티션 추가
추가되는 컬럼 값을 VALUES절 뒤에 기술을 해야 합니다. emp_list_pt 테이블에 emp_list_pt5 파티션을 추가하는 예제 입니다. 파티션 데이터는 job 컬럼의 데이터가 'DBA' 값을 가진 데이터만 저장 됩니다.
SQL> ALTER TABLE emp_list_pt
ADD PARTITION emp_list_pt5 VALUES ('DBA')
TABLESPACE ASSM_TBS5 NOLOGGING;
④ 파티션 삭제
Range Partition의 파티션 삭제 방법과 동일 합니다. 아래는 emp_list_pt 테이블의 emp_list_pt4 파티션을 삭제하는 예제 입니다.
SQL> ALTER TABLE emp_list_pt DROP PARTITION emp_list_pt5
반응형