Mysql实现分区功能(二)(二)

2014-11-24 14:03:07 · 作者: · 浏览: 4
EMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', email VARCHAR(30) NOT NULL DEFAULT '' ) PARTITION BY RANGE (uid) SUBPARTITION BY HASH (uid % 4) SUBPARTITIONS 2( PARTITION p0 VALUES LESS THAN (3000000) DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 VALUES LESS THAN (6000000) DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx' );

对 RANGE 分区再次进行子分区划分,子分区采用 HASH 类型。

或者

CREATE TABLE users (
    uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL DEFAULT '',
    email VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY RANGE (uid) SUBPARTITION BY KEY(uid) SUBPARTITIONS 2(
    PARTITION p0 VALUES LESS THAN (3000000)
    DATA DIRECTORY = '/data0/data'
    INDEX DIRECTORY = '/data1/idx',

    PARTITION p1 VALUES LESS THAN (6000000)
    DATA DIRECTORY = '/data2/data'
    INDEX DIRECTORY = '/data3/idx'
);

对 RANGE 分区再次进行子分区划分,子分区采用 KEY 类型。

四、分区管理

  • 删除分区
    ALERT TABLE users DROP PARTITION p0;

    删除分区 p0。

  • 重建分区
      RANGE 分区重建
      ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));

      将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。

      LIST 分区重建
      ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));

      将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。

      HASH/KEY 分区重建
      ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2;

      用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。

      新增分区
      • 新增 RANGE 分区
        ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)
        DATA DIRECTORY = '/data8/data'
        INDEX DIRECTORY = '/data9/idx');

        新增一个RANGE分区。

        新增 HASH/KEY 分区
        ALTER TABLE users ADD PARTITION PARTITIONS 8;

        将分区总数扩展到8个。

          新增 HASH/KEY 分区
          ALTER TABLE users ADD PARTITION PARTITIONS 8;

          将分区总数扩展到8个。