将某张表的数据,分别存储到不同的区域中。每个分区都是独立的表,都要存储该分区数据的数据、索引等信息。
使用mysql的分区功能,可以把一个大的数据表分成多个小份,用户不需要区分不同的表名。
一、分区算法
1. 按照某个字段取余 key
create table post (
id int unsigned not null AUTO_INCREMENT,
title varchar(255),
PRIMARY KEY (id)
) engine = innodb
partition by key (id) partitions 5;
2. 按照某个表达式取余 hash
create table student_hash(
id int unsigned not null auto_increment,
birthday date,
PRIMARY KEY(id,birthday);
) engine=myisam
partition by hash (month(birthday)) patitions 12;
3. 根据范围分区 range
create table goods (
id int,
uname char(10)
)engine myisam
partition by range(id) (
partition p1 values less than (10),
partition p2 values less than (20),
partition p3 values less than MAXVALUE
);
4. 根据散点值分区 list
create table user (
uid int,
pid int,
uname
)engine myisam
partition by list(pid) (
partition bj values in (1),
partition ah values in (2),
partition xb values in (4,5,6)
);
二、分区管理
1. 取余算法 key hash
采用取余算法的分区数量的修改,不会导致已有分区数据的丢失,需要重新分配数据到新的分区
增加分区: add partition N;
减少分区:coalesce partition N;
2. 条件算法 list range
添加分区
alert table goods add partition(
partition p4 values less than 40);
删除分区
alert table goods drop partition p1;
注意:删除条件算法的分区,会导致分区数据的丢失