개발로 자기계발
728x90

데이터베이스 파티셔닝은 큰 옷장을 정리하는 것에 비유할 수 있다. 옷장이 깔끔하게 정리되어 있다면, 특정 옷을 찾을 때 전체 옷장을 뒤져보지 않아도 된다. 이와 마찬가지로, 데이터베이스가 파티션으로 구분되어 있다면, 특정 데이터를 찾을 때 모든 데이터를 검색하지 않아도 된다.


다음으로, 코드 예시를 살펴봅시다. MySQL에서 'sales' 테이블을 연도별로 파티션 하려면 다음과 같이 쿼리를 작성할 수 있다:

CREATE TABLE sales (
    order_id INT NOT NULL,
    year     INT NOT NULL,
    amount   DECIMAL(10, 2) NOT NULL
)
PARTITION BY RANGE (year) (
    PARTITION p0 VALUES LESS THAN (1991),
    PARTITION p1 VALUES LESS THAN (1992),
    PARTITION p2 VALUES LESS THAN (1993),
    PARTITION p3 VALUES LESS THAN (1994)
);

DECIMAL은 MySQL에서 사용하는 데이터 유형 중 하나로, 정확한 숫자값을 저장하는 데 사용된다. 이 유형은 금융 계산이나 과학 계산에 적합하며, 소수점 이하의 정확한 위치를 유지한다. DECIMAL(10, 2)는 총 10자리의 숫자를 표현하며, 그중 2자리는 소수점 이하의 숫자이다.

이 SQL 명령은 'sales' 테이블을 만들고, 이 테이블을 연도별로 파티션한다. 'year' 값에 따라 데이터가 다른 파티션으로 분배된다. 예를 들어, 'year' 값이 1990인 모든 행은 'p0' 파티션에 저장되고, 'year' 값이 1991인 모든 행은 'p1' 파티션에 저장된다.

이렇게 하면, 1991년에 대한 주문 정보를 조회하려면 'p1' 파티션만 검색하면 된다. 이는 전체 테이블을 검색하는 것보다 훨씬 빠르게 결과를 반환한다.


데이터베이스 파티셔닝은 대용량 데이터를 관리하는 데 효율적인 방법이다. 큰 테이블을 작은 파티션으로 분할함으로써, 데이터 검색과 관리가 훨씬 빠르고 쉽게 이루어진다. 또한, 각 파티션은 별도로 백업하거나 복원할 수 있으므로 데이터의 가용성도 향상된다. 하지만 파티셔닝이 항상 최선의 선택은 아니다. 사용자의 요구에 따라, 파티셔닝, 인덱싱, 또는 다른 최적화 전략 중에서 가장 적합한 방법을 선택해야 한다.


예를 들어, 위에서 생성한 'sales' 테이블에서 1991년의 주문 정보를 조회하려면 다음과 같이 쿼리를 작성할 수 있다.

SELECT * FROM sales WHERE year = 1991;

이 쿼리를 실행하면, DBMS는 'year' 열이 1991인 행이 있는 파티션만 검색한다. 즉, 'p1' 파티션만 검색하게 된다. 이는 전체 테이블을 스캔하는 것보다 훨씬 효율적이다.

다만, 파티션 키가 WHERE 절에 없는 쿼리를 실행하면, DBMS는 모든 파티션을 검색해야 하므로 덜 효율적일 수 있다.

그리고 파티셔닝의 성능 향상을 확실히 누리려면, 일반적으로는 파티션 키가 포함된 인덱스를 생성해야 한다. 이렇게 하면 DBMS가 쿼리를 처리하는 데 필요한 파티션을 더 빠르게 찾을 수 있다.

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)