Mysql DB 파티셔닝

김윤하·2022년 11월 9일
0

Data Engineer

목록 보기
3/6

1. Partition 이란 ?

파티션이란 데이터가 너무 많은 경우 상당한 부하가 걸릴 수 있기 때문에 데이터를 분산하여 저장하는 방법으로 MySQL 서버 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 기능을 의미 합니다.

2. 파티션 형식

  • Range - 범위(날짜 등)를 기반으로 파티션
  • List - 코드나 카테고리 등 특정 값을 기반으로 파티션
  • Hash - 설정한 HASH 함수를 기반으로 파티션
  • Key - MD5() 함수를 이용한 HASH 값을 기반으로 파티션


3. 주의할 점

  • 파티션 테이블에는 외래 키를 설정할 수 없음
  • Primary Key, Unique Key가 존재하는 테이블에서는 반드시 파티션에서 사용되는 열도 PK, UK 중 한 가지로 사용
  • 스토어드 프로시저, 스토어드 함수, 사용자 변수 등을 파티션 식에 사용할 수 없다.
    임시 테이블은 파티션을 사용할 수 없음
  • 파티션 키에는 일부 함수만 사용 가능
  • MySQL은 파티션 개수는 최대 1,024개까지 지원
  • 레인지 파티션은 연속된 범위를 사용하고 리스트 파티션은 연속되지 않은 값(지역, 혈액형 등)을 사용
# 파티션 테이블 생성
CREATE TABLE `TABLE_NAME` (
	...
)  ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COMMENT='' 
PARTITION BY RANGE (TO_DAYS(yyyymmdd)) 
(PARTITION P_2020_10 VALUES LESS THAN (TO_DAYS('2020-11-01')) ENGINE = INNODB , 
PARTITION P_2020_11 VALUES LESS THAN (TO_DAYS('2020-12-01')) ENGINE = INNODB , 
PARTITION P_2020_12 VALUES LESS THAN (TO_DAYS('2021-01-01')) ENGINE = INNODB , 
PARTITION P_max VALUES LESS THAN MAXVALUE ENGINE = INNODB);

# 파티션 재구성
 ALTER TABLE TABLE_NAME REORGANIZE PARTITION `yyyymmdd` INTO (
    PARTITION P_2022_01 VALUES LESS THAN (TO_DAYS('2022-02-01')),
    PARTITION P_2022_02 VALUES LESS THAN (TO_DAYS('2022-03-01')),
    PARTITION P_2022_03 VALUES LESS THAN (TO_DAYS('2022-04-01')),
    PARTITION P_2022_04 VALUES LESS THAN (TO_DAYS('2022-05-01')),
    PARTITION P_2022_05 VALUES LESS THAN (TO_DAYS('2022-06-01')),
    PARTITION p_future VALUES LESS THAN MAXVALUE
);

https://docs.oracle.com/cd/B12037_01/server.101/b10743/partconc.htm

profile
data engineer

0개의 댓글