- Column의 특정 값으로 Partitioning을 하는 방법 입니다.
- List partition의 장점은 연관되지 않은 데이터, 순서에 맞지 않는 데이터의 grouping 을 쉽게 할 수 있습니다.
- 각 값 별로 분포도가 비슷하며, 많은 SQL에서 해당 Column의 조건이 많이 들어오는 경우 유용 합니다.
- 각 Partition의 분포도가 현격한 차이가 발생하지 않도록 해야 합니다.
- 여러 컬럼으로 partition key 생성이 가능하지 않으며 오직 하나의 column으로 구성되어야 합니다.
- Partition key 값은 NULL 값 또한 명시 가능하며, NULL 값을 포함한 어떠한 값이라도 한번만 명시할 수 있습니다.
- 대소문자를 구분 함, 범위외 문자 입력 에러 발생
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
- 강좌 URL : http://www.gurubee.net/lecture/1910
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.