수색…


비고

  • RANGE 파티셔닝 . 이 유형의 파티셔닝은 지정된 범위에 속하는 컬럼 값을 기반으로 파티션에 행을 지정합니다.

  • LIST 파티셔닝 . RANGE에 의한 파티셔닝과 비슷하지만 파티셔닝은 이산 값 집합 중 하나와 일치하는 열을 기반으로 선택됩니다.

  • HASH 파티셔닝 . 이 유형의 파티션에서는 테이블에 삽입 될 행의 C 럼 값에 대해 작동하는 g 용자 정의 표현식에 의해 리턴 된 값에 따라 파티션이 선택됩니다. 함수는 음수가 아닌 정수 값을 산출하는 MySQL에서 유효한 모든 표현식으로 구성 될 수 있습니다. 이 유형의 확장 인 LINEAR HASH 도 사용할 수 있습니다.

  • KEY 파티셔닝 . 이런 유형의 파티셔닝은 HASH에 의한 파티셔닝과 비슷하지만, 평가할 하나 이상의 컬럼 만 제공되며, MySQL 서버는 자체 해싱 기능을 제공한다. 이러한 열은 정수 값 이외의 값을 포함 할 수 있습니다. MySQL이 제공하는 해시 함수는 열 데이터 유형에 관계없이 정수 결과를 보장하기 때문입니다. 이 유형의 확장 인 LINEAR KEY 도 사용할 수 있습니다.

범위 분할

| | | 위별로 파티션 된 테이블은 파티션 표현식 값이 주어진 | 위 내에있는 행을 각 파티션에 포함하도록 파티션됩니다. 범위는 연속적이어야하지만 겹치지 않아야하며 VALUES LESS THAN 연산자를 사용하여 정의됩니다. 다음 몇 가지 예를 들어 다음과 같은 테이블을 작성하여 1 - 20의 번호가 지정된 20 개의 비디오 상점 체인에 대한 인사 레코드를 보관한다고 가정합니다.

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
);

이 표는 필요에 따라 여러 가지 방법으로 범위별로 분할 할 수 있습니다. 한 가지 방법은 store_id 열을 사용하는 것입니다. 예를 들어 다음과 같이 PARTITION BY RANGE 절을 추가하여 테이블을 4 가지 방법으로 분할 할 수 있습니다.

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 MAXVALUE
);

MAXVALUE 는 가능한 가장 큰 정수 값보다 큰 정수 값을 나타냅니다 (수학 언어에서는 상한선으로 사용됩니다).

MySQL 공식 문서를 기반 으로합니다 .

LIST 파티셔닝

목록 분할은 여러 가지 방법으로 범위 분할과 유사합니다. RANGE로 파티션을 구분할 때와 마찬가지로 각 파티션을 명시 적으로 정의해야합니다. 두 가지 유형의 파티셔닝의 주된 차이점은 목록 파티셔닝에서 각 파티션이 일련의 연속 범위 중 하나가 아닌 값 목록 집합 중 하나에서 열 값의 멤버십을 기반으로 정의되고 선택된다는 것입니다. 값. 이것은 PARTITION BY LIST(expr) 을 사용하여 수행됩니다. expr 은 열 값이거나 열 값을 기반으로 정수 값을 반환 한 다음 VALUES IN (value_list) 을 사용하여 각 파티션을 정의합니다. 여기서 value_list 는 a 쉼표로 구분 된 정수 목록.

다음 예제에서는 파티션 된 테이블의 기본 정의가 여기에 표시된 CREATE TABLE 문에 의해 제공된다고 가정합니다.

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
);

다음 표와 같이 4 개의 프랜차이즈간에 20 개의 비디오 상점이 분산되어 있다고 가정합니다.

부위 상점 ID 번호
북쪽 3, 5, 6, 9, 17
동쪽 1, 2, 10, 11, 19, 20
웨스트 4, 12, 13, 14, 18
본부 7, 8, 15, 16

같은 영역에 속한 상점의 행이 동일한 파티션에 저장되는 방식으로이 테이블을 파티션하려면

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)
);

MySQL 공식 문서를 기반 으로합니다 .

해시 파티셔닝

HASH에 의한 파티셔닝은 주로 사전 결정된 수의 파티션간에 데이터의 균등 한 분배를 보장하기 위해 사용됩니다. 범위 또는 목록 분할을 사용하면 지정된 열 값 또는 열 값 집합을 저장할 파티션을 명시 적으로 지정해야합니다. 해시 파티셔닝에서는 MySQL이 이것을 처리하고, 해쉬 할 컬럼 값과 분할 된 테이블을 나눌 분할 수에 따라 컬럼 값이나 표현식을 지정하면된다.

다음 문은 store_id 열에서 해싱을 사용하고 4 개의 파티션으로 분할 된 테이블을 만듭니다.

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
)
PARTITION BY HASH(store_id)
PARTITIONS 4;

PARTITIONS 절을 포함하지 않으면 파티션의 수는 기본적으로 1입니다.

MySQL 공식 문서를 기반 으로합니다 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow