Loading...
MySQL 9.5 Reference Manual 9.5의 26.2.6 Subpartitioning의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Subpartitioning(다른 말로 composite partitioning이라고도 함)은 파티션된 테이블에서 각 파티션을 더 세분화하는 것입니다. 다음 CREATE TABLE 구문을 살펴보십시오:
1CREATE TABLE ts (id INT, purchased DATE) 2 PARTITION BY RANGE( YEAR(purchased) ) 3 SUBPARTITION BY HASH( TO_DAYS(purchased) ) 4 SUBPARTITIONS 2 ( 5 PARTITION p0 VALUES LESS THAN (1990), 6 PARTITION p1 VALUES LESS THAN (2000), 7 PARTITION p2 VALUES LESS THAN MAXVALUE 8 );
테이블 ts에는 3개의 RANGE 파티션이 있습니다. 이들 각각의 파티션—p0, p1, 그리고 p2—은 다시 2개의 서브파티션으로 나뉩니다. 결과적으로 전체 테이블은 3 * 2 = 6개의 파티션으로 나뉩니다.
그러나 PARTITION BY RANGE 절의 동작으로 인해, 이들 중 처음 2개는 purchased 컬럼에 있는 값이 1990보다 작은 레코드만 저장합니다.
RANGE 또는 LIST로 파티션된 테이블은 서브파티셔닝이 가능합니다. 서브파티션은 HASH 또는 KEY 파티셔닝 둘 중 하나를 사용할 수 있습니다. 이는 composite 파티셔닝이라고도 합니다.
참고
SUBPARTITION BY HASH와 SUBPARTITION BY KEY는 일반적으로 각각 PARTITION BY HASH 및 PARTITION BY KEY와 동일한 구문 규칙을 따릅니다. 여기에 대한 예외는, SUBPARTITION BY KEY는( PARTITION BY KEY와 달리) 현재 기본 컬럼을 지원하지 않는다는 점이며, 따라서 테이블에 명시적 기본 키가 있더라도 이 목적에 사용할 컬럼을 반드시 지정해야 합니다.
이는 우리가 해결하기 위해 작업 중인 알려진 이슈입니다. 자세한 정보와 예시는 Issues with subpartitions를 참조하십시오.
또한 SUBPARTITION 절을 사용하여 개별 서브파티션에 대한 옵션을 지정함으로써 서브파티션을 명시적으로 정의할 수도 있습니다. 예를 들어, 이전에 제시한 것과 동일한 테이블 ts를 더 장황한 방식으로 생성하면 다음과 같습니다:
1CREATE TABLE ts (id INT, purchased DATE) 2 PARTITION BY RANGE( YEAR(purchased) ) 3 SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( 4 PARTITION p0 VALUES LESS THAN (1990) ( 5 SUBPARTITION s0, 6 SUBPARTITION s1 7 ), 8 PARTITION p1 VALUES LESS THAN (2000) ( 9 SUBPARTITION s2, 10 SUBPARTITION s3 11 ), 12 PARTITION p2 VALUES LESS THAN MAXVALUE ( 13 SUBPARTITION s4, 14 SUBPARTITION s5 15 ) 16 );
여기에서 주목해야 할 구문 관련 항목은 다음과 같습니다:
각 파티션은 동일한 개수의 서브파티션을 가져야 합니다.
파티션된 테이블의 어떤 파티션에 대해서라도 SUBPARTITION을 사용하여 서브파티션을 하나라도 명시적으로 정의하는 경우, 모든 서브파티션을 정의해야 합니다. 다시 말해, 다음 구문은 실패합니다:
1CREATE TABLE ts (id INT, purchased DATE) 2 PARTITION BY RANGE( YEAR(purchased) ) 3 SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( 4 PARTITION p0 VALUES LESS THAN (1990) ( 5 SUBPARTITION s0, 6 SUBPARTITION s1 7 ), 8 PARTITION p1 VALUES LESS THAN (2000), 9 PARTITION p2 VALUES LESS THAN MAXVALUE ( 10 SUBPARTITION s2, 11 SUBPARTITION s3 12 ) 13 );
이 구문은 SUBPARTITIONS 2를 사용하더라도 여전히 실패합니다.
각 SUBPARTITION 절에는 (최소한) 서브파티션의 이름이 포함되어야 합니다. 그렇지 않으면 서브파티션에 대해 원하는 옵션을 설정하거나, 해당 옵션에 대한 기본 설정을 사용하도록 둘 수 있습니다.
서브파티션 이름은 테이블 전체에서 고유해야 합니다. 예를 들어, 다음 CREATE TABLE 구문은 유효합니다:
1CREATE TABLE ts (id INT, purchased DATE) 2 PARTITION BY RANGE( YEAR(purchased) ) 3 SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( 4 PARTITION p0 VALUES LESS THAN (1990) ( 5 SUBPARTITION s0, 6 SUBPARTITION s1 7 ), 8 PARTITION p1 VALUES LESS THAN (2000) ( 9 SUBPARTITION s2, 10 SUBPARTITION s3 11 ), 12 PARTITION p2 VALUES LESS THAN MAXVALUE ( 13 SUBPARTITION s4, 14 SUBPARTITION s5 15 ) 16 );
26.2.5 KEY Partitioning
26.2.7 How MySQL Partitioning Handles NULL