MYSQL 子分区详解

子分区

子分区是分区表中每个分区的再次分割。例如,考虑下面的CREATE TABLE语句:

CREATE TABLE ts (id INT, purchased DATE)  
 PARTITION BY RANGE(YEAR(purchased)) 
  SUBPARTITION BY HASH(TO_DAYS(purchased))  
   SUBPARTITIONS 2(  
     PARTITION p0 VALUES LESS THAN (1990),   
     PARTITION p1 VALUES LESS THAN (2000),   
     PARTITION p2 VALUES LESS THAN MAXVALUE
     );

表ts有3个RANGE分区。这3个分区中的每一个分区——p0, p1, 和 p2——又被进一步分成了2个子分区。实际上,整个表被分成了3 * 2 = 6个分区。但是,由于PARTITION BY RANGE子句的作用,这些分区的头2个只保存“purchased”列中值小于1990的那些记录。

在MySQL 5.1中,对于已经通过RANGE或LIST分区了的表再进行子分区是可能的。子分区既可以使用HASH希分区,也可以使用KEY分区。这也被称为复合分区(composite partitioning)。

为了对个别的子分区指定选项,使用SUBPARTITION子句来明确定义子分区也是可能的。

例如,创建在前面例子中给出的同一个表的、一个更加详细的方式如下:

CREATE TABLE ts (id INT, purchased DATE)  
 PARTITION BY RANGE(YEAR(purchased))   
 SUBPARTITION BY HASH(TO_DAYS(purchased))
    (
    PARTITION p0 VALUES LESS THAN (1990) 
          (SUBPARTITION s0,  
          SUBPARTITION s1 ),     
      PARTITION p1 VALUES LESS THAN (2000)  
           (SUBPARTITION s2,
              SUBPARTITION s3 ),   
       PARTITION p2 VALUES LESS THAN MAXVALUE   
              (SUBPARTITION s4,
               SUBPARTITION s5)  
           );

几点要注意的语法项:

·    每个分区必须有相同数量的子分区。

·   如果在一个分区表上的任何分区上使用SUBPARTITION来明确定义任何子分区,那么就必须定义所有的子分区。换句话说,下面的语句将执行失败:

CREATE TABLE ts (id INT, purchased DATE)
 PARTITION BY RANGE(YEAR(purchased))
  SUBPARTITION BY HASH(TO_DAYS(purchased))
   (
      PARTITION p0 VALUES LESS THAN (1990)
          ( SUBPARTITION s0,
             SUBPARTITION s1),
       PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE
        (
        SUBPARTITION s2,
        SUBPARTITION s3
        )
   );

即便这个语句包含了一个SUBPARTITIONS 2子句,但是它仍然会执行失败。

每个SUBPARTITION子句必须包括 (至少)子分区的一个名字。否则,你可能要对该子分区设置任何你所需要的选项,或者允许该子分区对那些选项采用其默认的设置。·

 在每个分区内,子分区的名字必须是唯一的,但是在整个表中,没有必要保持唯一。例如,下面的CREATE TABLE语句是有效的:

 CREATE TABLE ts (id INT, purchased DATE)
  PARTITION BY RANGE(YEAR(purchased))
  SUBPARTITION BY HASH(TO_DAYS(purchased))
  (
  PARTITION p0 VALUES LESS THAN (1990)
   (
    SUBPARTITION s0,
     SUBPARTITION s1
     ),
     PARTITION p1 VALUES LESS THAN (2000)
     (
      SUBPARTITION s0,
      SUBPARTITION s1
      ),
       PARTITION p2 VALUES LESS THAN MAXVALUE
        (
        SUBPARTITION s0,
        SUBPARTITION s1
        )
   );

转载 :http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html#partitioning

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值