mysql 分区-key分区(五)

key分区

按照key进行分区非常类似于按照hash进行分区,只不过hash分区允许使用用户自定义的表达式

与hash分区不用的是,key分区不允许使用用于自定义的表达式,需要使用mysql服务器提供的hash函数,不需要hash分区那样对字段整型进行转换,

同时hash分区只支持整数分区,而key分区支持使用出blob or text类型外的其他类型的列作为分区键。

和hash功能一样,不同的是分区的字段可以是非int类型,如字符串、日期等类型。

语法:

create table <table> (
	// 字段
) ENGINE=数据库引擎  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1

#方法1:
partition by key(expr) partitions num;

#方法2(不指定默认首选主键作为分区键,在没有主键的情况下会选择非空唯一键作为分区键):
partition by key() partitions num;

#方法3(支持线性分区linear key):
partition by linear key(expr)


expr:是零个或者多个字段名的列表
num:表示分区数量
key分区也支持线性分区linear key

demo1:
该表有40家超市职员记录,假定你需要将超市员工按入职时期进行分别存储,

#方法1
CREATE TABLE `employees_key_create_time` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ename` varchar(30) NOT NULL DEFAULT '' COMMENT '员工名称',
  `ecode` varchar(30) NOT NULL DEFAULT '' COMMENT '员工编号',
  `store_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '所属门店',
  `create_time` datetime(6) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`,`create_time`)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'
partition by key(create_time)
partitions 5;

分区文件(截图):
在这里插入图片描述
demo2:
该表有40家超市职员记录,假定你需要将超市员工按唯一主键进行分别存储,

#方法2:
	CREATE TABLE `employees_key_id` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ename` varchar(30) NOT NULL DEFAULT '' COMMENT '员工名称',
  `ecode` varchar(30) NOT NULL DEFAULT '' COMMENT '员工编号',
  `store_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '所属门店',
  `create_time` datetime(6) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`,`create_time`)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'
partition by key()
partitions 5;

分区文件(截图):
在这里插入图片描述
demo3:
该表有40家超市职员记录,假定你需要将超市员工按唯一主键(线性分区)进行分别存储,

#方法3:
CREATE TABLE `employees_key_linear` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ename` varchar(30) NOT NULL DEFAULT '' COMMENT '员工名称',
  `ecode` varchar(30) NOT NULL DEFAULT '' COMMENT '员工编号',
  `store_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '所属门店',
  `create_time` datetime(6) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`,`create_time`)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'
partition by linear key (id)		

分区文件(截图):
在这里插入图片描述
【注意:key分区只能重置分区不能删除或添加分区】

1.重置分区

alter table employees_key_create_time add partition partitions 6;

alter table employees_key_id add partition partitions 6;

alter table employees_key_linear add partition partitions 4;

2.移除表的分区

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值