Heim  >  Artikel  >  Datenbank  >  MySQL分区表的管理~1_MySQL

MySQL分区表的管理~1_MySQL

WBOY
WBOYOriginal
2016-05-27 13:46:31893Durchsuche

一、如何管理RANGE和LIST分区

 

以该分区表为例

 

 

CREATE TABLE members (

    id INT,

    fname VARCHAR(25),

    lname VARCHAR(25),

    dob DATE

)

PARTITION BY RANGE( YEAR(dob) ) (

    PARTITION p0 VALUES LESS THAN (1970),

    PARTITION p1 VALUES LESS THAN (1980),

    PARTITION p2 VALUES LESS THAN (1990)

);

 

1. 删除分区

 

ALTER TABLE members DROP PARTITION p1;

注意:如果删掉了某分区,则该分区内的数据将全部丢失,不仅如此,在用show create table members\G;命令查看该表的创建语句时将无法看到被删除分区的任何信息。

 

         对于RANGE分区来说,如果删除了p1分区,在插入数据时,如果日期在1970到1980区间之内,则该数据将会被分配到下一个分区,即p2,。

 

         对于LIST分区,如果删除了某一分区,在插入数据时,如果数据属于这一分区,则插入会报错。

 

         如果只是删除数据而不删除该分区的信息,可使用truncate命令

 

ALTER TABLE members TRUNCATE PARTITION p1;

 

 

2. 添加分区

 

ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));

注意:使用ADD命令来添加分区,只能在分区列表的末尾添加,具体到本例中,只能添加到1990年以后。

 

当然,在实际生产环境中,这样的局限性太大,譬如我想将p0分区之前添加一个分区,区间为1960,或者将p1之间再添加一个1975的分区,这时候,用ADD将无法满足此类需求,可使用ALTER TABLE ... REORGANIZE PARTITION命令。

 

譬如:

 

ALTER TABLE members REORGANIZE PARTITION p0 INTO (

    PARTITION s0 VALUES LESS THAN (1960),

    PARTITION s1 VALUES LESS THAN (1970)

);

REORGANIZE命令其实是相当灵活的,不仅能拆分分区,还可以用来合并分区,譬如:

 

ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO (

    PARTITION m0 VALUES LESS THAN (1980),

    PARTITION m1 VALUES LESS THAN (2000)

);

注意:

 

1> 不能使用REORGANIZE PARTITION命令修改表的分区类型,只能通过ALTER TABLE ... PARTITION BY ....语句,譬如:

 

ALTER TABLE members

    PARTITION BY HASH( YEAR(dob) )

    PARTITIONS 8;

2> REORGANIZE PARTITION语法如下:

 

ALTER TABLE tbl_name

    REORGANIZE PARTITION partition_list

    INTO (partition_definitions);

partition_definitions中分区的范围必须要涵盖partition_list中的分区范围。

 

 

 

二、如何管理HASH和KEY分区

 

以该分区表为例

 

 

CREATE TABLE clients (

    id INT,

    fname VARCHAR(30),

    lname VARCHAR(30),

    signed DATE

)

PARTITION BY HASH( MONTH(signed) )

PARTITIONS 12;

 

对于HASH分区和KEY分区,并不支持上述RANGE和LIST分区的语法,譬如DROP,TRUNCATE,REORGANIZE分区。

 

事实上,它只支持一种类型的“分区调整”。

 

ALTER TABLE clients COALESCE PARTITION 4;

该命令的作用在于将clients表的分区剪裁4个,从12个剪裁到8个。

 

ALTER TABLE clients ADD PARTITION PARTITIONS 6;

同样,该命令为clients表增加了6个分区,从12个到18个。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn