특정 열의 값을 기준으로 테이블을 여러 개의 파티션으로 나누는 데이터베이스 파티셔닝 기법 중 하나이다.각 파티션은 특정 값 목록을 포함하며,해당 목록에 포함된 값을 가진 행들만 해당 파티션에 저장된다.
리스트 파티셔닝의 특징
*책보고 적어
리스트 파티셔닝 예시


CREATE TABLE sales2 (
sale_id NUMBER,
sale_date DATE,
amount NUMBER,
region VARCHAR2(50)
)
PARTITION BY RANGE (sale_date) (
PARTITION p2020 VALUES LESS THAN (DATE '2021-01-01'),
PARTITION p2021 VALUES LESS THAN (DATE '2022-01-01'),
PARTITION p2022 VALUES LESS THAN (DATE '2023-01-01'),
PARTITION p2023 VALUES LESS THAN (MAXVALUE)
)
INSERT ALL
INTO sales2 (sale_id, sale_date, amount, region) VALUES (1, DATE '2020-10-20', 100.00, '서울')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (2, DATE '2021-05-15', 200.00, '경기')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (3, DATE '2022-01-25', 150.00, '강원')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (4, DATE '2023-07-01', 250.00, '제주')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (5, DATE '2020-12-31', 300.00, '부산')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (6, DATE '2021-08-08', 200.00, '대구')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (7, DATE '2022-03-12', 100.00, '인천')
INTO sales2 (sale_id, sale_date, amount, region) VALUES (8, DATE '2023-11-18', 400.00, '광주')
SELECT * FROM dual;
-- EXPLAIN PLAN FOR을 활용한 실행계획 생성
EXPLAIN PLAN FOR SELECT * FROM sales2 WHERE sale_date BETWEEN DATE '2021-01-01' AND DATE '2021-12-31';
-- 실행계획 보기
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

쿼리의 조건을 보면 2021년에 해당하는 조건을 추출한다. 그리고 이 조건에 해당하는 파티션은 p2021이다. 실행계획을 보면 파티션의 범위가 2번부터 시작해서 2번까지인 것을 알 수 있다. 여기서 의미하는 2는 파티션 생성 할 때,두번째에 생성된것을 의미한다.
해시파티셔닝은 특정 컬럼 값을 해시함수에 적용하여 데이터를 균등하게 여러 파티션에 분배하는 방식이다.
해시 파티셔닝 특징(책보고 적엉) 밑에는 임시..,
해시 파티셔닝 예시

CREATE TABLE orders (
order_id NUMBER PRIMARY KEY,
order_date DATE,
customer_id NUMBER,
product_id NUMBER,
amount NUMBER
)
PARTITION BY HASH (order_id)
(
PARTITION p1,
PARTITION P2,
PARTITION P3,
PARTITION p4
)
-- 데이터 삽입
INSERT ALL
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (1, DATE '2024-07-01', 101, 201, 1000)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (2, DATE '2024-07-01', 102, 202, 2000)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (3, DATE '2024-07-02', 103, 203, 1500)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (4, DATE '2024-07-02', 104, 204, 2500)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (5, DATE '2024-07-03', 105, 205, 3000)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (6, DATE '2024-07-03', 106, 206, 3500)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (7, DATE '2024-07-04', 107, 207, 4000)
INTO orders (order_id, order_date, customer_id, product_id, amount) VALUES (8, DATE '2024-07-04', 108, 208, 4500)
SELECT * FROM dual;
EXPLAIN PLAN FOR SELECT * FROM ORDERS WHERE order_id = 1;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- 파티션 VALUE확인
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_PARTITION('orders', 'p1'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_PARTITION('orders', 'p2'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_PARTITION('orders', 'p3'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_PARTITION('orders', 'p4'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('ORDERS', 'P4'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(format => 'ALL'));
select * from orders partition (p1);
select * from orders partition (p2);
select * from orders partition (p3);
select * from orders partition (p4);