mysql 分区-hash分区(四)

Hash分区

Hash分区,分区字段必须是整型或者转换为整型
Hash分区主要用来分散热点读,确保数据在预先确定个数的分区中可能的平均分布。对一个表执行Hash分区时,mysql会对分区键应用一个散列函数,以此确定数据应当放在N个分区中的哪个分区。

mysql支持两种hash分区:

  1. 常规hash分区使用的是取模算法,对应一个表达式expr是可以计算出它被保存到哪个分区中,N = MOD(expr, num)
  2. 线性hash分区使用的是一个线性的2的幂运算法则。

对指定的字段(整型字段)进行哈希,将记录平均的分配到分区中,使得所有分区的数据比较平均。 hash分区只需要指定要分区的字段和要分成几个分区,
expr是一个字段值或者基于某列值云散返回的一个整数,expr可以是mysql中有效的任何函数或者其它表达式,只要它们返回一个即非常熟也非随机数的整数。

【注意:一个很明显的问题就是,如果分区字段本身的分布不匀均,那么hash分区之后存储的分区也是不均匀的,hash分区时对于hash的字段,需要慎重。】
【注意:常规hash分区增加分区时或者合并分区,新增一个分区后,原来分区的数据大部分都需要通过重新计算进行重新分区。管理上带来了的代价太大,不适合需要灵活变动分区的需求。(列子:假设原来是5个常规hash分区,现在需要增加一个常规分区,原来的取模算法是MOD(expr, 5), 根据余数0~4分布在5个分区中,现在新增一个分区后,取模算法变成MOD(expr, 6),根据余数0~6分区在6个分区中,原来5个分区的数据大部分都需要通过重新计算进行重新分区)】
【注意:线性hash分区的优点是在分区维护(增加、删除、合并、拆分分区)时,mysql能够处理的更加迅速,缺点是:对比常规hash分区,线性hash各个分区之间数据的分布不太均衡。】

语法:

create table <table> (
	// 字段
) ENGINE=数据库引擎  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
PARTITION BY HASH(expr)
PARTITIONS <num>;

hash:表示按hash分区
expr:可以是一个字段名或者基于某列值云散返回的一个整数,
expr可以是mysql中有效的任何函数或者其它表达式【表达式运算如year(create_time)】,只要它们返回一个即非常熟也非随机数的整数。
num:表示分区数量

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

CREATE TABLE `employees_hash` (
  `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 hash(YEAR(create_time))
partitions 10;

【注意:hash分区只能重置分区不能删除或添加分区】

分区文件(截图):
在这里插入图片描述

1.重置分区

alter table employees_hash add partition partitions 5;

2.移除表的分区

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值