본문 바로가기
💾Database & Server/SQL

[SQL] 파티션(Partition) 사용하여 데이터 조회하기.

by inbeom 2024. 2. 9.
728x90
파티션은 데이터를 효율적으로 저장하고 관리하기 위한 기술로, 테이블이나 인덱스를 더 작은 논리적(물리적) 단위로 분할하는 것을 의미한다. 

 

 

주요 특징

1.성능 향상:

 특정 파티션에 대한 쿼리르 실행할 때는 해당 파티션에만 접근하면 되므로 데이터 검색이 빨라질 수 있다. 

2.유지 보수 용이성:

대용량 테이블을 파티션으로 나누면 데이터 관리가 용이해진다. 특히, 특정 파티션의 데이터를 백업하거나 삭제하는 작업이 간편해진다.

3.병렬 처리:

파티셔닝은 쿼리를 병렬로 실행할 때 도움이 된다. 각 파티션을 서로 독립적으로 처리될 수 있으므로 병렬 처리를 통해 전체 쿼리의 성능을 향상시킬 수 있다.
 

*파티션 유형: List partition, Range partition, Hash partition, Composite partition .. 

 
파티션의 특징에 대해 간단히 알아보았고, 이러한 파티션들은 보통 테이블을 생성할 때 테이블에 적용할 수 있다.
Ex >

-- 범위 파티션을 사용한 테이블 생성
CREATE TABLE sales (
    product_id INT,
    sale_date DATE,
    amount DECIMAL(10, 2)
) PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p0 VALUES LESS THAN (2020),
    PARTITION p1 VALUES LESS THAN (2021),
    PARTITION p2 VALUES LESS THAN (2022)
);

-- 범위 파티션을 활용하여 특정 기간의 데이터 조회
SELECT *
FROM sales PARTITION (p1)
WHERE YEAR(sale_date) = 2020;

 
 

테이블에 파티션 적용하지 않고 파티션으로 데이터 조회하기

위의 내용에서 파티션에 대해 이해했으면 파티션을 사용하는 방법에 대해 알아보자. 
 
일반적으로 테이블을 생성할 때 파티션을 적용하는 방법을 사용해도 되지만 데이터를 조회할 때 SELECT 쿼리에서 파티션을 사용하여 데이터를 조회할 수 있다.
 

SELECT
    sys_id,
    salary,
    SUM(salary) OVER (PARTITION BY sys_id) AS total_salary
FROM your_table;

이러한 방식으로 윈도우 함수 OVER를 사용하여 원하는 특정 그룹(컬럼)만 묶어 해당 그룹에 대한 계산을 수행할 수 있다.
 

Group By & Partition By

Partition by를 사용한 윈도우 함수와 Group by를 사용하는 방법은 각각의 목적에 맞게 선택할 수 있다.

 
Partition By

SELECT
    sys_id,
    salary,
    SUM(salary) OVER (PARTITION BY sys_id) AS total_salary
FROM your_table;

 
특징
유연성: 윈도우 함수는 각 행에 대해 계산을 수행하므로, 원하는 특정 행 또는 특정 그룹에 대한 계산이 가능하다.
성능: 테이블이 큰 경우에도 윈도우 함수는 각 행에 대한 계산을 효율적으로 처리할 수 있다.
결과 데이터 구조: 윈도우 함수를 사용하면 원본 데이터에 윈도우 함수 결과를 추가하여 결과가 더 넓어질 수 있다.
 

Group By

SELECT
    sys_id,
    SUM(salary) AS total_salary
FROM your_table
GROUP BY sys_id;

 
특징
결과 데이터 구조: 결과 각 그룹당 하나의 레코드만 반환되기 때문에 결과 데이터가 더 간결하게 구성된다.
집계 기능: Count, Avg, Min, Max 등 다양한 집계 함수를 함께 사용할 수 있다.
유연성: 모든 행이 그룹화되어 하나의 결과 행으로 나타나므로, 특정 행에 대한 계산이 윈도우 함수보다 여려울 수 있다.
성능: 테이블을 그룹화하고 집계하는 과정이기 때문에 윈도우 함수보다 선능상의 부담이 있을 수 있다. 
 
 

어떤 것을 선택해야 할까?

목적과 요구사항에 따라 선택: 각각의 방법은 특정한 사용 사례에 더 적합하다. 윈도우 함수는 각 행에 대한 개별적인 계산이 필요한 경우에 적합하며, GROUP BY는 그룹화된 결과를 얻고자 할 때 적합하다.

성능 고려: 데이터의 크기와 성능 요구사항에 따라 선택되어야 한다. 대규모 테이블에서는 윈도우 함수가 성능면에서 유리할 수 있다.

집계 기능 사용 여부: GROUP BY는 다양한 집계 함수와 함께 사용할 수 있어 더 많은 기능을 제공한다. 만약 간단한 합계나 평균 등의 집계가 목적이라면 GROUP BY가 유용할 수 있다.

종합적으로, 어떤 방법을 선택할지는 실제 사용 사례와 데이터의 특성에 따라 다를 것이며, 성능 튜닝과 가독성을 고려하여 결정해야 한다.
 
 
 

- 끝 -

 
 
 
reference.
https://oracle-base.com/articles/12c/partitioned-external-tables-12cr2

728x90