SQLP
시험 직전 요약장
판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.
파티션 설계의 기본: Range·List·Hash·Composite·Interval·Reference
원래 이론 →판단 기준
파티셔닝은 하나의 큰 Table 또는 Index를 여러 Partition이라는 독립 관리 단위로 나누면서도 애플리케이션에는 하나의 논리 객체처럼 보이게 하는 물리 설계입니다. 데이터가 저장된 각 Partition은 일반적으로 별도의 Segment를 가지지만, Deferred Segment Creation이 적용된 빈 Partition은 실제 Segment가 아직 할당되지 않을 수 있습니다. 따라서 파티션은 논리적 분할 단위이고 Segment는 실제 저장 공간 단위라는 차이를 먼저 이해해야 합니다.
성능
→ Partition Key Predicate로 불필요한 Partition을 제거하는 Pruning
관리성·가용성
→ Load·Exchange·Drop·Move·Compression·Backup·Recovery를 Partition 단위로 수행
확장성
→ Parallel Processing과 Partition-Wise Join의 작업 단위 제공
파티션 수를 늘리는 것 자체는 목적이 아닙니다. 가장 중요한 결정은 Partition Key, 경계, Partition 수, Index 구조이며 다음 요구를 함께 만족해야 합니다.
조회 Predicate
+ 데이터 증가 방향
+ 보관·삭제·적재 단위
+ 조인 Key와 병렬 처리
+ 값 편중과 Hotspot
+ 운영 복잡도
SQL이 Partition Key와 연결되지 않거나 Partition Key에 불필요한 함수·암시적 형변환을 적용하면 많은 Partition을 읽을 수 있습니다. 파티션 테이블이라는 사실만으로 조회가 자동으로 빨라지는 것은 아니며, 실행계획의 PSTART, PSTOP, Partition Iterator와 실제 I/O를 확인해야 합니다.
헷갈리는 개념
일반 Heap Table은 보통 하나의 Table Segment에 Row를 저장합니다. Partitioned Table은 같은 논리 Table의 Row를 Partition Key에 따라 여러 Partition에 나눕니다.
논리 객체: SALES
Partition
├─ P202501
├─ P202502
├─ P202503
└─ P_MAX
Partition은 독립적으로 관리하고 접근할 수 있는 논리적 조각입니다. 데이터가 저장되면 각 Partition이 독립 Segment를 가지는 것이 일반적이지만, 빈 Partition에 Deferred Segment Creation이 적용되면 첫 Row가 들어오기 전까지 Segment가 없을 수 있습니다.
애플리케이션은 보통 Partition 이름이 아니라 Table 이름을 조회합니다.
SELECT SUM(amount)
FROM sales
WHERE sale_date >= DATE '2025-02-01'
AND sale_date < DATE '2025-03-01';
Optimizer는 Predicate와 Partition 정의를 비교해 읽지 않아도 되는 Partition을 제거하고, 선택된 Partition 내부에서 Full Scan·
Partition Pruning
→ 어떤 Partition을 읽을지 결정
Access Path
→ 선택된 Partition 안을 어떤 방식으로 읽을지 결정
파티셔닝은 Index를 대체하지 않습니다. Pruning으로 Partition 수를 줄여도 남은 Partition의 Row 수가 많으면 적절한 Index나 Full Scan·
대표 계산·예제
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
customer_id NUMBER,
amount NUMBER
)
PARTITION BY RANGE (sale_date)
SUBPARTITION BY HASH (customer_id)
SUBPARTITIONS 8 (
PARTITION p202501 VALUES LESS THAN (DATE '2025-02-01'),
PARTITION p202502 VALUES LESS THAN (DATE '2025-03-01'),
PARTITION pmax VALUES LESS THAN (MAXVALUE)
);
sale_date Range
→ 월별 적재·삭제·Pruning
customer_id Hash
→ 월 내부의 여러 고객 Key 분산·병렬 처리·Partition-Wise Join 후보
SQL에 sale_date 조건만 있으면 주 Partition은 줄지만 선택된 각 Range Partition의 여러 Hash Subpartition을 읽을 수 있습니다. customer_id 등치 조건까지 있으면 각 Range Partition 안에서 관련 Hash Subpartition도 줄어들 수 있습니다.
내 최근 연습 오답
현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.
오답 기록을 확인하고 있습니다.