하나의 DBMS 서버에서 테이블을 분산하는 것, 원격 서버 간의 분산을 지원하는 것이 아니다.
MySQL 5.1부터 제공되는 기능이다.
파티션을 사용하는 이유
1. 테이블의 사이즈가 커져, 인덱스의 크기도 커지는 경우 - 쿼리가 느려짐
파티션을 이용하여 테이블 분할 할 경우, 인덱스도 각각 생성되어 인덱스 크기가 작아짐
메모리에서 빠르게 쿼리 작업을 진행할 수 있음
2. 주기적으로 삭제 등의 작업이 이루어지는 히스토리 성 데이터의 효율적인 관리
히스토리성 테이블을 파티션 테이블로 관리하면, 불필요한 데이터 삭제 작업을 단순히 파티션을 추가하거나 삭제하는 방식으로 간단하고 빠르게 해결할 수 있다.
3. 데이터 파일 경량화 및 물리적인 저장소 분리
파티션을 통해 파일의 크기를 조절하거나 각 파티션 별 파일들이 저장될 위치나 디스크를 구분해서 지정할 수 있다.
파티션 종류
Range
범위(날짜 등)를 기반으로 파티션을 나눈다. ( 가장 흔히 사용됨)
Range 파티션을 사용하기 좋은 예시
칼럼 1개를 기준으로 범위 조건 (less than)을 이용해 파티셔닝을 한다
날짜 기반으로 테이터가 누적되는 경우
연도, 월, 일 단위로 데이터를 분석하거나 삭제하는 경우
List
코드나 카테고리 등 특정 값을 기반으로 파티션을 나눈다.
In 조건을 이용해 파티셔닝을 한다.
Hash
설정한 Hash 함수를 기반으로 파티션을 나눈다.
Key
MD5 함수를 이용한 Hash값을 기반으로 파티션을 나눈다 ( Hash 보다는 균등하게 나뉨 )
사용 예시
CREATE TABLE test_logs (
idx INT NOT NULL,
reg_date DATETIME NOT NULL,
PRIMARY KEY(idx, reg_date)
)
PARTITION BY RANGE (YEAR (reg_date)) (
PARTITION test_logs_2018 VALUES LESS THAN (2019),
PARTITION test_logs_2019 VALUES LESS THAN (2020),
PARTITION test_logs_2020 VALUES LESS THAN (2021),
PARTITION test_logs_etc VALUES LESS THAN MAXVALUE
);