본문 바로가기
DB/sql

[Oracle] 파티션(Partition)

by 혀끄니 2025. 12. 23.
728x90
  • 파티션이란?

- 파티션이란 특정한 기준으로 데이터를 분할하여 저장해놓은 테이블

- 논리적인 1개의 테이블에 대해서 물리적으로 여러개의 파티션 테이블이 생성되는 것

- 오랜기간동안 쌓인 데이터를 수월하게 관리하고 성능저하를 방지하기 위한 용도로 사용

- 서로 다른 파티션에 저장함으로써 노드간의 디스크 경합을 최소화하여 성능을 향상

  • 장점

1. 고가용성

- 파티셔은 독립적으로 관리

- 같은 테이블에서 Unavailable한 파티션은 다른 파티션에 영향을 주지않음

2. 편리한 관리

- 사용자 지정값으로 파티션이 가능

- TableSpace간 파티션 이동이 가능

3. 성능개선

- 데이터를 조회할 때 액세스하는 범위를 줄여 성능이 향상

  • 파티션종류

1. 범위(RANGE)파티션

- 날짜나 숫자처럼 범위를 가진 데이터(연속된 값)를 기준으로 하여 만든 파티션 테이블

- 실제 데이터가 물리적으로 저장되는 곳은 Partition으로 나누어진 TableSpace

--사용방법
ALTER TABLE sales
PARTITION BY RANGE (sale_date) (
    PARTITION sales_jan VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')),
    PARTITION sales_feb VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')),
    PARTITION sales_mar VALUES LESS THAN (TO_DATE('2024-04-01', 'YYYY-MM-DD'))
);
--조회방법
SELECT * FROM sales PARTITION(sales_jan);
-- 결과:
-- SALE_ID | SALE_DATE  | AMOUNT
-- 1       | 2024-01-15 | 1000

SELECT * FROM sales PARTITION(sales_feb);
-- 결과:
-- SALE_ID | SALE_DATE  | AMOUNT
-- 2       | 2024-02-10 | 2000
-- 3       | 2024-02-20 | 1500

2. 해시(HASH)파티션

- 데이터를 균등하게 분산시키는 방식

- 특정 컬럼의 해시값을 기준으로 나눔

- 해시파티션은 데이터가 어느 파티션에 지정될지 알 수 없기 때문에 관리의 목적보다는 데이터를 분산시켜 디스크성능을 개선하는 목적

--사용방법
ALTER TABLE sales_hash
PARTITION BY HASH (sale_id)
PARTITIONS 4;
--조회방법
--해시 파티션은 직접적인 파티션 이름조회보단 전체에서 분산확인
SELECT sale_id, sale_amount FROM sales_hash;
-- 결과 (예시):
-- SALE_ID | SALE_AMOUNT
-- 1       | 1000
-- 2       | 1500
-- 3       | 2000
-- (파티션 내부 분산은 DBA_TAB_PARTITIONS 등에서 확인 가능)

3. 리스트(List)파티션

- 특정값을 가진 데이터로 만든 파티션 테이블

- 데이터가 균등하게 분포되어 있을 때 유용

--사용방법
ALTER TABLE region_sales
PARTITION BY LIST (region_code) (
    PARTITION asia VALUES ('KR', 'JP', 'CN'),
    PARTITION europe VALUES ('UK', 'FR', 'DE')
);
--조회방법
SELECT * FROM region_sales PARTITION(asia);
-- 결과:
-- SALE_ID | REGION_CODE
-- 10      | KR
-- 11      | JP

SELECT * FROM region_sales PARTITION(europe);
-- 결과:
-- SALE_ID | REGION_CODE
-- 12      | UK
-- 13      | FR
728x90

'DB > sql' 카테고리의 다른 글

[Oracle] 통계정보(Statistics)  (0) 2025.12.25
[Oracle] 옵티마이저(Optimizer)  (0) 2025.12.24
이기적SQLD(데이터 모델링)1-1  (0) 2023.10.24
오라클 SQL(PL/SQL 제어문)  (0) 2023.10.23
오라클 SQL(PL/SQL1)  (0) 2023.10.20