Oracle 10g 강좌
Hash Partition 4 0 16,037

by 김정식 HASH PARTITION PARTITION STORE IN 파티션 PARTITION TABLE [2006.06.17]


Hash Partition 이란?

  - Hash Partition은 Partitioning Key 값에 해시 함수를 적용하여 Data를 분할하는 방식으로 History Data의 관리의 목적 보다는 성능 향상의 목적으로 나온 개념 입니다

  - Hash Partition 은 Range Partition 으로 만들기 힘든 사항 즉, 조건을 주기 힘든 경우, 각 파티션 이 고르게 나누어지지 않아 밸런스을 유지하기 힘든 경우라고 판단되는 경우에 유리합니다.

  - Hash Partition 의 경우 각각 다른 파티션에 데이터가 고르게 분산시키기 위해서는 반드시 파티션 의 개수를 명시하여야 하며, 파티션의 수를 2 의 거듭 제곱수 (즉, 2,4,8,16 ….)로 설정하여야 합니다.

  - NULL 값은 첫 번째 파티션에 위치하게 됩니다.

Hash Partition 예제

① 파티션 테이블 생성

  아래 예제 Partition Table 은 입력되는 sales_no의 값을 가지고 Hash 함수를 이용하여 각 Row가 저장될 Partition을 내부적으로 결정하게 된다.

 
 -- 생성 예제 1
 SQL> CREATE TABLE sales_hash_exam
       (sales_no NUMBER,
        sale_year CHAR(4) NOT NULL,
        sale_month CHAR(2) NOT NULL,
        sale_day CHAR(2) NOT NULL,
        customer_name  VARCHAR2(30),
        price NUMBER)
      PARTITION BY HASH (sales_no)
      PARTITIONS 4   --> 2 의 거듭제곱수로 지정
      STORE IN (ASSM_TBS1, ASSM_TBS2, ASSM_TBS3, ASSM_TBS4);
 
 
-- 생성 예제 2
-- sales_hash1, sales_hash2..와 같이 파티션을 직접 지정 할 수 있다.
-- 하지만 각 파티션에  어떤 데이터가 지정될지 모르므로 무의미 할 수 있다.
SQL> CREATE TABLE sales_hash
       (sales_no NUMBER,
        sale_year CHAR(4) NOT NULL,
        sale_month CHAR(2) NOT NULL,
        sale_day CHAR(2) NOT NULL,
        customer_name  VARCHAR2(30),
        price NUMBER)
     PARTITION BY HASH (sales_no) 
       (PARTITION sales_hash1 TABLESPACE ASSM_TBS1,
        PARTITION sales_hash2 TABLESPACE ASSM_TBS2,
        PARTITION sales_hash3 TABLESPACE ASSM_TBS3,
        PARTITION sales_hash4 TABLESPACE ASSM_TBS4);
    

② 데이터 조작

  아래와 같이 데이터를 INSERT 하고, 데이터가 저장된 파티션을 확인해 보자. 데이터가 오라클 내부 해쉬 알고리즘에 위해서 파티션이 지정 되었음을 알 수 있다

 
-- INSERT
INSERT INTO sales_hash VALUES(1, 2004, 06, 12, 'scott', 2500);
INSERT INTO sales_hash VALUES(2, 2005, 06, 17, 'jones', 4300);
INSERT INTO sales_hash VALUES(3, 2005, 12, 12, 'miller', 1200);
INSERT INTO sales_hash VALUES(4, 2006, 06, 22, 'ford', 5200);
INSERT INTO sales_hash VALUES(5, 2005, 01, 01, 'lion', 2200);
INSERT INTO sales_hash VALUES(6, 2006, 12, 22, 'tiger', 3300);
COMMIT;


-- 조회
SELECT sales_no FROM sales_hash PARTITION (sales_hash1); --> 6
SELECT sales_no FROM sales_hash PARTITION (sales_hash2); --> 레코드 없음
SELECT sales_no FROM sales_hash PARTITION (sales_hash3); --> 2,5
SELECT sales_no FROM sales_hash PARTITION (sales_hash4); --> 1,3,4
    

참고링크

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

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

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

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