mysql 分区表

分区表就是按照某种规则将同一张表的数据分段划分到多个位置存储。对数据的分区存储提高了数据库的性能,被分区存储的数据在物理上是多个文件,但在逻辑上仍然是一个表,对表的任何操作都跟没分区之前一样。在执行增、删、改、查操作时,数据库会自动找到对应的分区,然后执行操作。
mysql从5.1.3开始支持分区

分区表的好处:存储更多、便于管理、提升查询效率、并行处理、提高查询吞吐

分区表中的四种类型
mysql支持的分区类型包括Range、List、Hash和Key,其中Range最常用。
Range分区:允许将数据划分为不同范围。例如可以将一个表通过年份划分成若干个分区。
List分区:允许系统通过预定义的列表的值来对数据进行分割。
Hash分区:允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。
Key分区:对Hash模式的一种延伸,这里的Hash Key是mysql系统产生的。

Range分区
Range分区是基于属于一个给定连续区间的列值,把多行分配给分区。

Range分区示例

create table user_range(
	id int not null auto_increment,
	name varchar(30),
	age int,
	birthday date,
	province int,
	primary key(id,age) #主键必须包含分区字段
)default charset=utf8
#将表按照年龄范围进行分区
partition by RANGE(age)(
	partition p1 values less than (20) data directory = 'c:/data/p1',
	partition p2 values less than (40) data directory = 'c:/data/p2',
	partition p3 values less than (60) data directory = 'c:/data/p3',
	partition p4 values less than maxvalue data directory = 'c:/data/p4'
);

#插入数据
insert into user_range(name,age,province) values('张三',18,1);
insert into user_range(name,age,province) values('李四',30,1);

List分区
List分区是基于列值匹配一个离散值集合中的某个值来进行选择。

示例

creat table user_range(
	id int not null auto_increment,
	name varchar(30),
	age int,
	birthday date,
	province int,
	primary key(id,province) #主键必须包含分区字段
)
partition by List(province)(
	partition p1 values in (1,3,5,7,9,11,13,15,17,19,21),
	partition p2 values in (2,4,6,8,10,12,14,16,18,20,22),
	partition p3 values in (23,24,25,26,27,28,29,30,31,32,33,34)
);

分区的其它操作
新增分区

alter table 'user' add partition(partition p5 values less than maxvalue);

对已存在的表进行分区

alter table 'user' partition by range(age)(
	partition p1 values less than (20) data directory = 'c:/data/p1', 
	partition p2 values less than (20) data directory = 'c:/data/p2',
	partition p3 values less than (20) data directory = 'c:/data/p3',
	partition p4 values less than (20) data directory = 'c:/data/p4'
);

删除分区(分区下的数据也会被删除)

alter table 'user' drop partition p5;

移除分区(数据不会被删除)

alter table 'user' remove partitioning;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值