파티션 종류 및 개념 알아보기(Hash Partition, List partition, composite partition)
안녕하세요.
계속해서 파티션(partition)에 대하여 알아보고 있습니다.
파티션에 사용되는 파티셔닝 기법이라는 것과
실제 쿼리 작성하여 실습을 통해 range 파티션을 알아보았습니다.
이전 포스팅 글 입니다.
[개발/DB] - [오라클(oracle)] range 파티션(partition) 알아보기
[개발/DB] - [오라클(oracle)] 파티션 테이블을 개념(테이블 파티셔닝)
이번 포스팅에서는 실습을 진행하지 않을 것입니다.
이유는, 앞서 실습을 통해 알아봤던 range 파티션을 실습해보니..... 부분적으로 캐치만 하면 다른 파티션 기법을 사용할 수 있다고 생각하기 때문입니다.
지금부터 다른 파티션에 대해 알아보겠습니다.
range partition(범위 파티션) - 복습
장점 : 사용하고 관리하기 쉬움
단점 : 데이터가 균일하게 분포되지 못해서 성능 저하가 있을 수 있음
ex)년도별로 판매테이블 파티셔닝 할 경우
-> 판매가 많이 된 년도에는 데이터가 많아서 작업 속도가 느려질 것이고,
판매량이 적은 년도는 데이터가 적어서 빨리 조회되는 등의 단점이 있음
이와같은 문제점으로 Hash partition(해쉬 분할)이 등장하게 되었습니다.
HASH PARTITION(8i 버전부터 지원)
개념 및 장점 : Hash 함수가 데이터를 각 테이블스페이스 별로 균등하게 분포시키켜 성능을 향상 시킴
단점 : 사용자가 데이터를 분산하지 않고 Hash 함수가 분산시키기 때문에 데이터의 관리 등이 매우 어려움
LIST PARTITIION(목록 분할 파티션)
List partition(목록 분할 파티션)
개념 : 파티셔닝 할 항목을 관리자가 직접 지정하는 방식임
장점 : 잘 설정할 경우 빠른 성능 보장됨
단점 : 잘못 설정될 경우 성능 저하됨
ex) A제품용 파티션을 별도로 생성했으나 판매 부진으로 판매량이 없음
COMPOSITE PARTITION(복합 파티션)
개념 : 지금까지 언급해온 파티션들을 복합적으로 사용하는 것
지원 형태 : 오라클 버전별로 다름
☞ 8i : range - hash
☞ 9i : range - list 추가지원
☞ 11g : range - range, list - range, list- list, list - hash 추가지원
○ Range - Hash 파티션
- 개념 : 일자별로 먼저 파티셔닝을 하고 그 안에 또 Hash 파티셔닝을 하는 방법
- 단점 : 데이터가 어느 파티션에 속할지 제어할 수 없음
- 예를들면, 판매 테이블을 분기별로 파티셔닝 한 후 각 분기마다 hash 파티셔닝을 한번 더하는 것
(이전 포스팅에서 range 파티션을 이용하여 분기별로 나눴음)
- 복합 파티션은 처음임으로 예시 쿼리를 적어보겠습니다.
create table panmae
(
pdate varchar2(8),
pcode number(3),
pqty number(5)
)
partition by range(pdate)
subpartition by hash(pcode)
subpartitions 4
(
partition q1 values less than ('20100401') tablespace ts_t1,
partition q2 values less than ('20100701') tablespace ts_t2,
partition q3 values less than ('20101001') tablespace ts_t3,
partition q4 values less than ('20110101') tablespace ts_t4,
);
○ Range - List 파티션
- 개념 : 각 row가 어느 파티션에 속할지 알 수 있음
create table panmae
(
pdate varchar2(8),
pcode number(3),
pqty number(5)
)
partition by range(pdate)
subpartition by list (pcode)
(
partition q1 values less than ('20100401') tablespace ts_t1
(subpartition 파티션 value ('1'),
subpartition 파티션2 value ('2'),
subpartition 파티션3 value ('3')),
partition q2 values less than ('20100701') tablespace ts_t2
(subpartition 파티션 value ('1'),
subpartition 파티션2 value ('2'),
subpartition 파티션3 value ('3')),
partition q3 values less than ('20101001') tablespace ts_t3
(subpartition 파티션 value ('1'),
subpartition 파티션2 value ('2'),
subpartition 파티션3 value ('3')),
);
○ Interval Partition(11g New Feature)
- 개념 : Range의 확장형으로 파티션의 범위를 벗어난 데이터가 입력될 경우 에러가 발생하지 않고
오라클이 필요한 파티션을 스스로 생성한 후 데이터 입력
제가 이러한 파티셔닝 기법을 활용하여 데이터를 다루는 그날이 왔으면 좋겠네요.
모두 좋은 하루 보내세요.
'개발 > DB' 카테고리의 다른 글
오라클(oracle) rank(), row_number() 순위함수 사용 예제 (2) | 2019.11.13 |
---|---|
데이터베이스(DB) 정규화(1차,2차,3차) (0) | 2019.11.10 |
drop, delete, truncate 차이점 및 개념 이해하기 (4) | 2019.11.06 |
[오라클(oracle)] range 파티션(partition) 알아보기 (0) | 2019.10.28 |
[오라클(oracle)] sql merge 기능 설명 및 예제 (2) | 2019.10.22 |
[오라클(oracle)] 파티션 테이블을 개념(테이블 파티셔닝) (0) | 2019.10.21 |
[오라클] Join 원리, 개념 파악하기(loop join, sort_merge join, hash join) (4) | 2019.10.19 |