19.2.5 KEY 파티셔닝
키에 의한 파티셔닝은 해시로 파티셔닝과 비슷하지만 해시 파티셔닝은 사용자 정의 표현식을 사용하여 키 파티셔닝에 대한 해시 함수는 MySQL 서버에 의해 제공됩니다. MySQL Cluster는이를 위해 MD5()
를 사용합니다. 다른 스토리지 엔진을 사용하는 테이블의 경우, 서버는 PASSWORD()
와 같은 알고리즘을 기반으로 자체 내부 해시 함수를 사용합니다.
CREATE TABLE ... PARTITION BY KEY
구문 규칙은 해시로 파티션 된 테이블을 작성할 때의 것과 비슷합니다. 주요 차이점을 보여줍니다.
HASH
대신KEY
가 사용됩니다.KEY
는 0 개 이상의 컬럼 이름의 목록만을 취합니다. 파티셔닝 키로 사용되는 컬럼은 테이블의 기본 키의 일부 또는 전부를 구성해야합니다 (테이블에 그것이있는 경우). 파티셔닝 키로 컬럼 이름을 지정하지 않으면 테이블의 기본 키가 사용됩니다 (있는 경우). 예를 들어, 다음의CREATE TABLE
문은 MySQL 5.6에서 사용할 수 있습니다.CREATE TABLE k1 ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20) ) PARTITION BY KEY() PARTITIONS 2;
기본 키는 아니지만 고유 키는 경우는 파티셔닝 키에 고유 키가 사용됩니다.
CREATE TABLE k1 ( id INT NOT NULL, name VARCHAR(20), UNIQUE KEY (id) ) PARTITION BY KEY() PARTITIONS 2;
그러나 고유 키 컬럼이
NOT NULL
로 정의되어 있지 않은 경우 이전 문은 실패합니다.두 경우 모두 파티셔닝 키는
id
컬럼입니다. 그러나SHOW CREATE TABLE
의 출력과INFORMATION_SCHEMA.PARTITIONS
테이블PARTITION_EXPRESSION
컬럼에 표시되지 않습니다.다른 파티션 타입의 경우와 달리,
KEY
에 의한 분할에 사용되는 컬럼은 정수 또는NULL
값으로 제한되지 않습니다. 예를 들어, 다음의CREATE TABLE
문은 유효합니다.CREATE TABLE tm1 ( s1 CHAR(32) PRIMARY KEY ) PARTITION BY KEY(s1) PARTITIONS 10;
다른 파티션 유형이 지정된 경우 이전 명령문이 유효 없습니다 (이 경우
s1
은 테이블의 기본 키이기 때문에 단순히PARTITION BY KEY()
를 사용하는 것도 효과적이며,PARTITION BY KEY(s1)
과 같은 효과가 있습니다).이 문제에 대한 자세한 내용은 섹션 19.6 "파티셔닝 제약 및 제한" 을 참조하십시오.
참고NDB
스토리지 엔진을 사용하는 테이블은 테이블의 기본 키를 파티셔닝 키로 사용하여KEY
에 의해 암묵적으로 분할됩니다. MySQL Cluster 테이블에 명시적인 기본 키가없는 경우는NDB
스토리지 엔진에 의해 각 MySQL Cluster 테이블에 생성 된 "숨겨진"기본 키가 파티셔닝 키로 사용됩니다.NDB
테이블에 명시적인 파티셔닝 구성표를 정의하려면 테이블에 명시적인 기본 키가 필요하며, 분할 식에 사용되는 컬럼이 키의 일부인해야합니다. 그러나 테이블이 "하늘"의 파티셔닝 식을 사용하는 (즉, 컬럼 참조없이PARTITION BY KEY()
) 경우 명시적인 기본 키는 필요하지 않습니다.이 파티션은 ndb_desc 유틸리티 (
-p
옵션 포함)을 사용하여 확인할 수 있습니다.중요키에 의해 분할 된 테이블의 경우,
ALTER TABLE DROP PRIMARY KEY
를 실행할 수 없습니다. 그것을 실행하면 다음과 같은 오류가 발생합니다 : ERROR 1466 (HY000) : Field in list of fields for partition function not found in table. 이것은KEY
로 파티션 된 MySQL Cluster 테이블의 경우는 문제가 없습니다. 그런 경우 "숨겨진"기본 키 테이블의 새로운 파티셔닝 키로 사용하여 테이블이 재구성됩니다. 제 18 장 "MySQL Cluster NDB 7.3 및 MySQL Cluster NDB 7.4" 을 참조하십시오.
리니어 키에 의해 테이블을 분할 할 수 있습니다. 다음은 간단한 예제를 보여줍니다.
CREATE TABLE tk ( col1 INT NOT NULL, col2 CHAR(5), col3 DATE ) PARTITION BY LINEAR KEY (col1) PARTITIONS 3;
LINEAR
를 사용하는 것은 HASH
파티셔닝의 경우와 같은 효과가 KEY
파티셔닝에 파티셔닝 번호는 법 연산이 아니라 제곱 알고리즘을 사용하여 도출됩니다. 이 알고리즘의 설명 및 그 영향에 대해서는 섹션 19.2.4.1 "LINEAR HASH 파티셔닝" 를 참조하십시오.