2010년 10월 18일 월요일

파티셔닝5

서브 파티셔닝


RANGE와 LIST일 때 각 파티션을 더 분할할 수가 있다.  매뉴얼에서는 이것을 서브파티션이라고 부른다.

예1>
CREATE TABLE ptrange( a INT, b INT, c CHAR(10) )
    PARTITION BY RANGE(a)
      SUBPARTITION BY HASH(a)
     (
       PARTITION pt0 VALUES LESS THAN ( 1000)
      (
          SUBPARTITION s0,
          SUBPARTITION s1
      ),
      PARTITION pt1 VALUES LESS THAN MAXVALUE
     (
         SUBPARTITION s2,
         SUBPARTITION s3
      )
    );

예2>
CREATE TABLE ptrange( a INT, b INT, c CHAR(10) )
    PARTITION BY RANGE(a)
      SUBPARTITION BY HASH(a)
         SUBPARTITIONS 2
        (
          PARTITION pt0 VALUES LESS THAN (1000),
          PARTITION pt1 VALUES LESS  THAN MAXVALUE
        );

MySQL의 파티셔닝에 대해서  정리해보았다.  꽤 유연하게 파일을 분할할 수 있다는 것을 알 수 있다.   한개의 테이블이 큰 경우에는  파티셔닝의 채용을 검토 해 보자.

2010년 10월 14일 목요일

파티셔닝4

파티셔닝의 방법 

MySQL의 파티셔닝방법에는  RANGE, LIST, HASH, KEY의 4가지 방법이 제공된다.
이것은 PARTITION BY로 지정한다.

  • RANGE: 지정된 컬럼 값에 의해서 파티셔닝을 한다.  컬럼명을 지정하는 경우에는 정수형이어야하고 함수식을 지정하는 경우에는  정수를 리턴하는 함수이어야 한다.  조건의 판정에는 VALUES LESS THAN를 사용한다. MAXVALUE는 최대값을 의미한다.

CREATE TABLE ptrange( a INT)
   PARTITION BY RANGE(a) (
     PARTITION pt0 VALUES LESS THAN ( 1000 ), 
     PARTITION pt1 VALUES LESS THAN MAXVALUE ); 

  • LIST: 지정된 값에 의해서 파타셔닝을 한다.  컬럼명만을 지정하는 경우에는 정수형이어야하고 함수식을 지정하는 경우에는 정수를 리턴하는 함수이어야 한다.  조건을 지정할때에는 각 파티션정의에 VALUES IN(값 [값,...])을 사용한다. 

 CREATE TABLE ptlist( a INT UNSIGNED)
   PARTITION BY LIST(a) (
     PARTITION pt0 VALUES IN (1,4),
     PARTITION pt1 VALUES IN (2,5),
     PARTITION pt2 VALUES IN (3,6)  );

  • HASH: 지정된 값에 따라서 MySQL이 행을 자동으로 나눈다.  컬럼명만을 지정하는 경우에는 정수형이어야하고 함수식을 지정하는 경우에는 정수를 리턴하는 함수이어야 한다.  

CREATE TABLE pthash(a INT, b INT, c CHAR(10) ) 
     PARTITION BY HASH(a) 
     PARTITION 2;

  • KEY: 지정된 값에 따라서 MySQL이 행을 자동으로 나눈다.  0개이상의 컬럼명(함수)를 지정할 수 있다.  값을 지정하지 않은 경우 테이블의 PRIMARY KEY가 자동적으로 채용된다. 

CREATE TABLE ptkey(a INT, b INT, c CHAR(10) ) 
    PARTITION BY KEY(a, b, c)
    PARTITIONS 2;

 CREATE TABLE ptkey( a INT PRIMARY KEY, b INT, c CHAR(10) ) 
    PARTITION BY KEY()
    PARTITIONS 2;