mysql表分区的类型_简述MySQL分区表类型

分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表。我们在此之前已经讲过MySQL分区表的原理,分区有利于管理非常大的表,它采用分而治之的逻辑,便于对数据的管理。本文我们就来进一步了解MySQL分区表,详细看一下MySQL分区表类型究竟有几个?

MySQL支持多种分区表,我们看到最多的是根据范围进行分区,每个分区存储落在某个范围的记录,分区表达式可以是列,也可以是包含列的表达式。分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样做可以将相关数据存放在一起,另外,如果想一次批量删除整个分区的数据也会变的很方便。实现分区表的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。

MySQL支持如下几种类型的分区:

1.RANGE分区:行数据基于一个给定连续范围分区。不好理解,看例子吧。5.5版本开始支持RANGE COLUMNS分区。

2.LIST分区:同RANGE,区别在于给定的不是连续范围,是离散的值。5.5版本开始支持LIST COLUMNS分区。

3.HASH分区:根据用户自定义的表达式的返回值进行分区,返回值不能是负数。

4.KEY分区:根据MySQL内部提供的哈希函数进行分区。

5.COLUMNS分区:5.5版本开始支持,可以直接使用非整形的数据进行分区,分区根据类型直接比较而得,不需要转换为整形。

无论创建何种类型的分区,如果表中存在主键或唯一索引的列,则分区列必须是主键或唯一索引的一部分。索引列可以是null值。在没有主键和唯一索引的表中可以指定任意列为索引列。表中只能最多有一个唯一索引,即primary  key 和unique key不能同时存在,primary key包含在unique key中时除外。

create table sales(

order_date datetime not null,

-- other columns omitted

) engine=innodb partition by range(year(order_date)) (

partition p_2010 values less than (2010),

partition p_2011 values less than (2011),

partition p_2012 values less than (2012),

partition p_catchall  values less than maxvalue

);

partition分区子句中可以使用各种函数,但有一个要求,表达式返回的值要是一个确定的整数,且不能是一个常数。MySQL还支持键值,哈希和列表分区,这其中有些还支持子分区,不过我们在生产环境中很少见到。

我们还看到的一些其他的分区技术包括:

根据键值进行分区,来减少InnoDB的互斥竞争。

使用数据模函数来进行分区,然后将数据轮询放入不同的分区。

假设表有一个自增的主键列id,希望根据时间将最近的热点数据集中存放,那么必须将时间戳包含在主键当中才行,而这和主键本身的意义相矛盾,这种情况下可以使用这样的分区表达式来实现相同的目的:Hash(id div 100000) ,这将为100万数据简历一个分区,这样一方面实现了当初的分区目的,另一方面比起使用时间范围分区还避免了一个问题,就是当超过一定阀值时,如果使用时间范围分区就必须新增分区。

当然,分区技术的应用远不止与此,区分各种分区表的类型并加以利用,我们才能更好地使用MySQL数据库查询和利用各种各样的数据。本站的MySQL教程中,对mysql分区表有着十分详细的讲解,想要深入学习的小伙伴一定不要错过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值