Oracle 10g 강좌
List Partition 4 0 99,999+

by 구루비 LIST PARTITION PARTITION 파티션 PARTITION TABLE [2006.06.18]


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
    

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1910

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입