二、如何分區?
1.查看數據庫是否支持分區
SHOW VARIABLES LIKE '%partition%';
對於mysql來講,現階段支持分區操作的版本有5.1和5.5.如圖顯示為YES則表明該數據庫支持分區操作。
俗稱:范圍分區。根據表的字段的值,依據給定某段連續的區間來分區。
直接創建表時分區
create table teacher (id varchar(20) not null , name varchar(20), age varchar(20), birthdate date not null, salary int ) partition by range(year(birthdate)) ( partition p1 values less than (1970), partition p2 values less than (1990), partition p3 values less than maxvalue );
Ps:創建teacher表,並在創建teacher表同時根據birthdate字段將表劃分為p1、p2、p3三個分區。
在創建表後分區
ALTER TABLE teacher partition by range(year(birthdate)) ( partition p1 values less than (1970), partition p2 values less than (1990), partition p3 values less than maxvalue );
Ps:給已經創建了的表分區,分為p1、p2、p3.
俗名:列表分區。其實list分區和range分區應該說都是一樣的,不同的是range分區在分區是的依據是一段連續的區間;而list分區針對的分區依據是一組分布的散列值。
create table student (id varchar(20) not null , studentno int(20) not null, name varchar(20), age varchar(20) ) partition by list(studentno) ( partition p1 values in (1,2,3,4), partition p2 values in (5,6,7,8), partition p3 values in (9,10,11) );
Ps:如上創建表student,並將student表分為p1、p2、p3三個分區。需要注意的是一般情況下,針對表的分區字段為int等數值類型。
小名:哈希分區。哈希分區主要是依據表的某個字段以及指定分區的數量。
create table user ( id int(20) not null, role varchar(20) not null, description varchar(50) ) partition by hash(id) partitions 10;
Ps:如上創建user表,並將user表平均分為十個分區。比較有限制的就是需要知道表的數據有多少才能更好平均分配分區。
類似於按HASH分區,區別在於KEY分區只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數。必須有一列或多列包含整數值。
create table role( id int(20) not null,name varchar(20) not null) partition by linear key(id) partitions 10;
對指定表添加分區
alter table user add partition(partition p4 values less than MAXVALUE);
刪除指定表指定分區
alter table student drop partition p1;
創建子分區
create table role_subp(id int(20) not null,name int(20) not null) partition by list(id) subpartition by hash(name) subpartitions 3 ( partition p1 values in(10), partition p2 values in(20) )
復合分區
alter table user reorganize partition p1,p3 into (partition p1 values less than (1000));