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 이름을 조회합니다.

SQL
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·Index Scan 등의 Access Path를 다시 선택합니다.

도식
Partition Pruning
→ 어떤 Partition을 읽을지 결정

Access Path
→ 선택된 Partition 안을 어떤 방식으로 읽을지 결정

파티셔닝은 Index를 대체하지 않습니다. Pruning으로 Partition 수를 줄여도 남은 Partition의 Row 수가 많으면 적절한 Index나 Full Scan·Parallel Scan 판단이 별도로 필요합니다.


이 부분의 원문 →

대표 계산·예제

SQL
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도 줄어들 수 있습니다.

이 부분의 원문 →

내 최근 연습 오답

현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.

학습 기록 →

오답 기록을 확인하고 있습니다.