###分区
将某张表数据,分别存储到不同的区域中
每个分区,就是独立的表。都要存储该分区数据的数据,索引等信息。
检查mysql是否支持分区算法
####分区算法:
MySQL提供4种
取余:Key,hash
条件:List,range
Create table tab (
字段
)
partition by 分区算法 (参数) 分区选项。
KEY – 取余
create table tab(
id int not null auto_increment,
birthday data,
primary key (id)
)engine= myisam
-- 将一张表分成四份
partition by key(id) partitions 4;
Hash – 取余(按照某个表达式的值进行取余)
create table tab(
id int not null auto_increment,
birthday data,
primary key (id,birthday)
)engine= myisam
-- 将一张表按月份分成12份
partition by hash(month(birthday)) partitions 12;
List – 条件 – 列表
需要指定的每个分区数据的存储条件
create table tab(
id int not null auto_increment,
birthday data,
primary key (id,birthday)
)engine= myisam
-- 按月份把字段分为春夏秋冬
partition by list (month(birthday)) (
partition spring values in (2,3,4),
partition summer values in (5,6,7,8),
partition autumn values in (9,10),
partition winter values in (11,12,1)
);
Range - 条件 – 范围
条件依赖的数据是一个条件表达式
create table tab(
id int not null auto_increment,
birthday data,
primary key (id,birthday)
)engine= myisam
-- 按年份把字段分为四份
partition by rang (year(birthday)) (
partition 70 values less than (1980),
partition 80 values less than (1990),
partition 90 values less than (2000),
partition 00 values less than MAXVALUE
);
管理分区语法
key,hash
-- 增加分区数量
alter table tab add partitions 1;
-- 减少分区数量
alter table tab COALESCE partitions 1;
list,range
-- 添加
alter table tab add partition (
partition 10 values less than (2010)
);
-- 减少会导致分区数据丢失
alter table tab drop partition 10;