182. 리스트 파티셔닝 (List Partitioning) - 명시적 특정 값 기준
핵심 인사이트: "서울 데이터는 1번 서랍, 부산 데이터는 2번 서랍에 쏙쏙 넣어라." 날짜처럼 연속된 '범위'가 아니라, 지역 코드나 부서 코드처럼 딱딱 떨어지는 '특정 값(List)'을 지정해서 파티션을 명확히 가르고 싶을 때 사용하는 직관적인 분류법이다.
Ⅰ. 리스트 파티셔닝(List Partitioning)의 개념
테이블의 파티션 키(Partition Key) 컬럼 값이 사전에 관리자가 명시적으로 정의해 둔 특정 값의 목록(List) 중 하나와 일치할 때, 해당 데이터를 미리 지정된 물리적 파티션에 저장하는 기법입니다. 날짜 같은 연속적인 값이 아니라, 불연속적이고 종류가 한정된 분포를 가지는 컬럼(예: 지역 코드, 부서 번호, 직급, 상태 값 등)에 매우 효과적입니다.
Ⅱ. 리스트 파티셔닝의 생성 예시
전국 지점의 매출 데이터를 지역별로 물리적으로 나누어 저장하는 예시입니다.
CREATE TABLE sales_region (
order_id NUMBER,
region_code VARCHAR2(10),
amount NUMBER
)
PARTITION BY LIST (region_code) ( -- ◀ 파티션 키를 '지역 코드'로 설정
-- 서울/경기 데이터 파티션
PARTITION p_seoul_gyeonggi VALUES ('SEOUL', 'GYEONGGI'),
-- 부산/경남 데이터 파티션
PARTITION p_busan_gyeongnam VALUES ('BUSAN', 'GYEONGNAM'),
-- 강원 데이터 파티션
PARTITION p_gangwon VALUES ('GANGWON'),
-- 위 리스트에 없는 나머지(기타) 지역 데이터 처리용 (필수 권장)
PARTITION p_default VALUES (DEFAULT)
);
Ⅲ. 리스트 파티셔닝의 장점과 특징
| 구분 | 설명 |
|---|---|
| 직관적인 관리 | 데이터가 어떤 파티션에 들어가는지 레인지나 해시 파티셔닝보다 훨씬 직관적으로 예측할 수 있습니다. (서울 데이터는 무조건 1번 파티션) |
| 효율적인 파티션 프루닝 | "강원도 지역의 매출을 조회하라"(WHERE region_code = 'GANGWON')는 쿼리가 들어오면, 옵티마이저는 오직 p_gangwon 파티션만 콕 찝어서(Pruning) 스캔합니다. |
| 독립적 데이터 관리 | 만약 회사가 강원 지사를 철수하게 되어 해당 데이터를 지워야 할 때, DROP PARTITION p_gangwon 한 줄로 대용량 데이터를 1초 만에 깔끔하게 삭제할 수 있습니다. |
Ⅳ. 주의사항
- 파티션 키 값으로 올 수 있는 모든 경우의 수를
VALUES리스트에 정의해야 합니다. 만약 매핑되지 않은 값(예: 'JEJU')이INSERT되는데DEFAULT파티션마저 만들어두지 않았다면, DB는 에러를 뱉으며 데이터 삽입을 거부합니다. - 데이터 분포가 고르지 않으면 특정 파티션(예: 서울)만 엄청나게 커지는 데이터 쏠림(Data Skew) 현상을 피할 수 없습니다.
📢 섹션 요약 비유: 우체국에서 우편물을 분류할 때, "우편번호 앞자리가 01~09면 서울 바구니에, 46~49면 부산 바구니에 넣어라!"라고 정확한 목적지(List)가 적힌 이름표를 바구니에 붙여두고, 편지가 들어오는 족족 그 이름표를 보고 던져 넣는 100% 수동 맞춤형 분류 작업입니다.