19.2 Partitioning Types
이 섹션에서는 MySQL 5.6에서 사용할 수있는 파티션 유형에 대해 설명합니다. 여기에는 다음 열거 된 유형이 포함됩니다.
RANGE 파티셔닝이 유형의 파티셔닝은 지정된 범위에 포함되는 컬럼 값에 따라 행을 파티션에 할당합니다. 섹션 19.2.1 "RANGE 파티션" 을 참조하십시오. 이 유형을 확장 한
RANGE COLUMNS
내용은 섹션 19.2.3.1 "RANGE COLUMNS 파티셔닝" 를 참조하십시오.LIST 파티셔닝
RANGE
의한 파티셔닝과 유사하지만 별도의 값 세트 중 하나와 일치하는 컬럼을 기준으로 파티션이 선택됩니다. 섹션 19.2.2 "LIST 파티셔닝" 를 참조하십시오. 이 유형을 확장 한LIST COLUMNS
내용은 섹션 19.2.3.2 "LIST COLUMNS 파티셔닝" 를 참조하십시오.HASH 파티셔닝이 유형의 파티셔닝 테이블에 삽입되는 행의 컬럼 값을 조작하는 사용자 정의 식에 의해 반환되는 값에 따라 파티션이 선택됩니다. 함수는 음수가 아닌 정수 값을 반환 MySQL의 유효한 식으로 구성 할 수 있습니다. 이 유형을 확장 한
LINEAR HASH
도 사용할 수 있습니다. 섹션 19.2.4 "HASH 파티셔닝" 를 참조하십시오.KEY 파티셔닝이 유형의 파티션은
HASH
의한 파티셔닝과 비슷하지만 평가되는 하나 이상의 컬럼 만 지정하고 MySQL 서버가 자체 해시 함수를 제공합니다. MySQL에서 제공하는 해시 함수는 컬럼 데이터 유형에 관계없이 정수 결과가 보장되므로 이러한 컬럼에 정수가 아닌 값이 포함되어 있어도 괜찮습니다. 이 유형을 확장 한LINEAR KEY
도 사용할 수 있습니다. 섹션 19.2.5 "KEY 파티션" 을 참조하십시오.
데이터베이스 파티셔닝의 매우 일반적인 사용 방법은 날짜별로 데이터를 분리하는 것입니다. 일부 데이터베이스 시스템은 MySQL 5.6에서는 구현되지 않은 명시적인 날짜 파티셔닝을 지원하고 있습니다. 그러나 MySQL에서 DATE
, TIME
또는 DATETIME
컬럼에 따라 또는 그러한 컬럼을 사용하는 식에 따라 파티셔닝 구성표를 만들 어렵지 않습니다.
KEY
또는 LINEAR KEY
로 분할하는 경우, DATE
, TIME
또는 DATETIME
컬럼을 컬럼 값의 변경을 실행 파티셔닝 컬럼으로 사용할 수 있습니다. 예를 들어, 다음 테이블 생성 구문은 MySQL에서 완전히 유효합니다.
CREATE TABLE members ( firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), joined DATE NOT NULL ) PARTITION BY KEY(joined) PARTITIONS 6;
MySQL 5.6에서는 RANGE COLUMNS
와 LIST COLUMNS
파티셔닝을 사용하여 DATE
또는 DATETIME
컬럼을 파티셔닝 컬럼으로 사용할 수 있습니다.
그러나 MySQL 다른 파티션 유형은 정수 값 또는 NULL
을 반환 파티셔닝식이 필요합니다. RANGE
, LIST
, HASH
또는 LINEAR HASH
의한 날짜 기반 파티셔닝을 사용하는 경우에는 다음과 같이 간단하게 DATE
, TIME
또는 DATETIME
컬럼을 조작하고 그런 값을 반환하는 함수를 사용할 수 있습니다.
CREATE TABLE members ( firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), joined DATE NOT NULL ) PARTITION BY RANGE( YEAR(joined) ) ( PARTITION p0 VALUES LESS THAN (1960), PARTITION p1 VALUES LESS THAN (1970), PARTITION p2 VALUES LESS THAN (1980), PARTITION p3 VALUES LESS THAN (1990), PARTITION p4 VALUES LESS THAN MAXVALUE );
날짜를 사용한 파티션의 추가 예제는이 장의 다음 절에 있습니다.
섹션 19.2.1 "RANGE 파티셔닝"
섹션 19.2.4 "HASH 파티셔닝"
섹션 19.2.4.1 "LINEAR HASH 파티셔닝"
날짜 기반 파티셔닝 더 복잡한 예는 다음 섹션을 참조하십시오.
19.4 절 "파티션 가지 치기"
섹션 19.2.6 "서브 파티셔닝"
MySQL 파티셔닝은 TO_DAYS()
, YEAR()
및 TO_SECONDS()
함수에서 사용하기 위해 최적화되어 있습니다. 그러나 정수 또는 NULL
을 반환 더많은 시간 함수 ( WEEKDAY()
, DAYOFYEAR()
, MONTH()
등)를 사용할 수 있습니다. 이러한 함수에 대한 자세한 내용은 섹션 12.7 "날짜 및 시간 함수" 를 참조하십시오.
사용하는 파티션의 유형에 관계없이 파티션에 만들 때 항상 0
에서 시작하는 번호가 순서대로 자동으로 붙이는 것을 기억하는 것이 중요합니다. 새로운 행이 분할 된 테이블에 삽입 될 때 이러한 파티션 번호가 올바른 파티션을 식별하는 데 사용됩니다. 예를 들어, 테이블에 4 개의 파티션이 사용되는 경우 이러한 파티션에는 0
, 1
, 2
및 3
로 번호가 매겨집니다. RANGE
및 LIST
파티셔닝 타입의 경우 각 파티션 번호의 파티션이 정의되어 있어야합니다. HASH
파티셔닝의 경우, 사용되는 사용자 함수가 0
보다 큰 정수를 반환해야합니다. KEY
파티셔닝의 경우 MySQL 서버가 내부적으로 사용하는 해시 함수에 의해이 문제가 자동으로 해결됩니다.
파티션의 이름은 보통 다른 MySQL 식별자 (테이블 이름, 데이터베이스 이름 등)을 제어하는 규칙에 따릅니다. 그러나 파티션 이름은 대 / 소문자를 구분하지 않습니다. 예를 들어, 다음의 CREATE TABLE
문은 표시된대로 실패합니다.
mysql>CREATE TABLE t2 (val INT)
->PARTITION BY LIST(val)(
->PARTITION mypart VALUES IN (1,3,5),
->PARTITION MyPart VALUES IN (2,4,6)
->);
ERROR 1488 (HY000): Duplicate partition name mypart
실패는 MySQL이 파티션 이름 mypart
과 MyPart
의 차이를 인식하지 못하기 때문에 발생합니다.
테이블의 파티션 번호를 지정하는 경우에는 선행 0없이 0이 아닌 양의 정수 리터럴로 표현해야, 0.8E+01
와 6-2
등의 표현이어서는 안됩니다 (이것이 정수 평가된다고해도). 소수는 허용되지 않습니다.
다음 섹션에서는 각 파티션 유형을 만드는 데 사용할 수있는 모든 형식의 구문을 제공하는 것은 아닙니다. 이 정보는 섹션 13.1.17 "CREATE TABLE 구문」 도 참조 해보세요.