SQL에서 파티션으느 대용량 데이터를 효율적으로 관리하고 쿼리 성능을 최적화하기 위해 테이블이나 인덱스를 논리적/물리적으로 분할하는 기술이다. 데이터베이스에서 파티셔닝은 주로 성능 개선, 관리 용이성, 가용성 향상을 목표로 사용된다.
파티셔닝 방식은 데이터 분할 기준에 따라 여러 유형(범위 파티션, 리스트 파티션, 해시 파티션, 컴포지트 파티션, 인터벌 파티션)으로 나뉜다.
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
)
PARTITION BY RANGE (sale_date) (
PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),
PARTITION p_max VALUES LESS THAN (MAXVALUE)
);
CREATE TABLE customers (
customer_id NUMBER,
region VARCHAR2(50),
name VARCHAR2(100)
)
PARTITION BY LIST (region) (
PARTITION p_asia VALUES ('Korea', 'Japan', 'China'),
PARTITION p_europe VALUES ('Germany', 'France'),
PARTITION p_others VALUES (DEFAULT)
);
CREATE TABLE orders (
order_id NUMBER,
customer_id NUMBER,
amount NUMBER
)
PARTITION BY HASH (customer_id)
PARTITIONS 4;
CREATE TABLE transactions (
transaction_id NUMBER,
trans_date DATE,
customer_id NUMBER
)
PARTITION BY RANGE (trans_date)
SUBPARTITION BY HASH (customer_id) (
PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD'))
(SUBPARTITION sp1, SUBPARTITION sp2),
PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))
(SUBPARTITION sp3, SUBPARTITION sp4)
);
CREATE TABLE logs (
log_id NUMBER,
log_date DATE
)
PARTITION BY RANGE (log_date)
INTERVAL (NUMTODSINTERVAL(1, 'MONTH')) (
PARTITION p_start VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD'))
);
1. 성능 향상:
2. 관리 용이성:
3. 병렬 처리:
4. 가용성:
1. 복잡성 증가:
2. 오버헤드:
3. 제한된 쿼리 최적화:
4. 스토리지 비용:
파티션은 대용량 데이터를 효율적으로 관리하기 위한 강력한 도구로, 쿼리 성능과 관리 편의성을 크게 개선할 수 있다. 적용 시점은 데이터 크기가 크고, 특정 패턴으로 조회/삭제가 빈번할 때 유리하고, 주의할점은 설계 시 파티션 키와 쿼리 패턴을 신중히 고려해야 효과를 극대화 할 수 있다.