MySQL資料庫分區表的管理~1

一、如何管理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個。

You May Also Like