by 구루비 HASH PARTITION PARTITION STORE IN 파티션 PARTITION TABLE [2006.06.17]
- Hash Partition은 Partitioning Key 값에 해시 함수를 적용하여 Data를 분할하는 방식으로 History Data의 관리의 목적 보다는 성능 향상의 목적으로 나온 개념 입니다
- Hash Partition 은 Range Partition 으로 만들기 힘든 사항 즉, 조건을 주기 힘든 경우, 각 파티션 이 고르게 나누어지지 않아 밸런스을 유지하기 힘든 경우라고 판단되는 경우에 유리합니다.
- Hash Partition 의 경우 각각 다른 파티션에 데이터가 고르게 분산시키기 위해서는 반드시 파티션 의 개수를 명시하여야 하며, 파티션의 수를 2 의 거듭 제곱수 (즉, 2,4,8,16 ….)로 설정하여야 합니다.
- NULL 값은 첫 번째 파티션에 위치하게 됩니다.
아래 예제 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
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.