mysql分區


查看數據庫版本是否支持分區:


spacer.gifwKioL1glZcvBkrA7AAAN018F6nM925.png-wh_50

分區的四種類型:

  1. Range分區(範圍分區,根據某個字段的值來進行分區,某個連續的區間來進行區分):

創建表時分區

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
);

創建表後分區:

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
);

2.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等數值類型。

3.HASH分區(哈希分區主要是依據表的某個字段以及指定分區的數量。

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表平均分爲十個分區。比較有限制的就是需要知道表的數據有多少才能更好平均分配分區。

4.KEY分區(類似於按HASH分區,區別在於KEY分區只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數。必須有一列或多列包含整數值。)

create table role( 
    id int(20) not null,
    name varchar(20) not null)
partition by linear key(id)partitions 10;

5、分區管理:

5.1)對指定表添加分區

alter table user add partition(partition p4 values less than MAXVALUE);

5.2)刪除指定表指定分區

alter table student drop partition p1;

5.3)創建子分區

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)
)

5.4)複合分區

alter table user
reorganize partition p1,p3 into
(partition p1 values less than (1000));




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章