MySQL 파티션 유형

JM·2021년 6월 23일
0

MySQL

목록 보기
8/10

https://dev.mysql.com/doc/refman/8.0/en/partitioning-types.html

1. RANGE

  • 범위별로 분할된 테이블은 각 파티션이 지정된 범위 내에 있는 분할 표현식 값의 행을 포함하는 방식으로 분할
  • 범위는 연속적이어야 하지만 중복되어서는 안 되며 VALUES LESS THAN 연산자를 사용하여 정의

✔ example

-- 테이블 생성
CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT NOT NULL,
    store_id INT NOT NULL
);

-- 파티션 추가
ALTER TABLE employees
PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN (21)
);

2. LIST

  • Range 파티셔닝과 유사
  • List 파티셔닝에서 각 파티션은 연속적인 값 범위 집합이 아닌 값 목록 집합 중 하나에서 열 값의 멤버 자격을 기준으로 정의되고 선택

✔ example

-- 테이블 생성
CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
);

-- 파티션 추가
ALTER TABLE employees
PARTITION BY LIST(store_id) (
    PARTITION pNorth VALUES IN (3,5,6,9,17),
    PARTITION pEast VALUES IN (1,2,10,11,19,20),
    PARTITION pWest VALUES IN (4,12,13,14,18),
    PARTITION pCentral VALUES IN (7,8,15,16)
);

3. HASH

  • 주로 미리 결정된 수의 파티션간에 데이터를 균등하게 분배하는 데 사용
  • Hash 할 열 값과 분할된 테이블을 분할할 파티션 수를 기준으로 열 값 또는 식만 지정 (이 결정은 자동으로 수행)

✔ example

--테이블 생성
CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
);

-- 파티션 추가
ALTER TABLE employees
PARTITION BY HASH(store_id)
    PARTITIONS 4;

4. KEY

  • Hash 파티셔닝과 유사
  • HASH 대신 KEY가 사용
  • KEY는 0개 이상의 열 이름 목록 만 사용
  • 파티션 키는 테이블의 기본 키의 일부 또는 전체로 구성 (PK는 없지만 UK가 있는 경우 UK가 파티션 키에 사용)

✔ example

--테이블 생성
CREATE TABLE k1 (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(20)
);

-- 파티션 추가
ALTER TABLE k1
PARTITION BY KEY()
    PARTITIONS 2;

5. SUBPARTITION

  • 복합 파티셔닝 이라고도 하는 하위 파티셔닝은 파티셔닝 된 테이블에서 각 파티션의 추가 분할
  • 각 파티션에는 동일한 수의 하위 파티션이 있어야 함
  • 분할된 테이블의 파티션에서 SUBPARTITION을 사용하여 하위 파티션을 명시적으로 정의하는 경우 모든 하위 파티션을 정의해야 함

✔ example

--테이블 생성
CREATE TABLE ts (
    id INT,
    purchased DATE
);

--파티션 추가
ALTER TABLE ts
PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) )
    SUBPARTITIONS 2 (
        PARTITION p0 VALUES LESS THAN (1990),
        PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE
    );
profile
오픈소스 DB엔지니어

0개의 댓글