MySQL的range分区

来源:http://www.hxstrive.com/article/16.htm

 

按照range分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行。这些区间要连续且不能相互重叠,使用values less than操作符来进行定义。在下面的几个例子中,假如你创建了如下表,该表保存有10个人员信息,这十个人员信息的编号从1到10。
CREATE TABLE person (
id INT NOT NULL,
NAME VARCHAR(100),
age INT NOT NULL,
takWork DATE NOT NULL
)
PARTITION BY RANGE(age) (
PARTITION p0 VALUES LESS THAN(20),
PARTITION p1 VALUES LESS THAN(30),
PARTITION p2 VALUES LESS THAN(40),
PARTITION p3 VALUES LESS THAN maxvalue
);
以上按照员工的年龄分区,1到19岁的保存在p0分区中,20到29保存到p1中,依次类推。PARTITION p3 VALUES LESS THAN maxvalue是保存大于39岁的员工,如果没有申明改行,则当插入年龄大于39岁的员工时会跑出错误。

在VALUES LESS THAN 子句中使用一个表达式也是可能的。这里最值得注意的限制是MySQL 必须能够计算表达式的返回值作为LESS THAN (<)比较的一部分;因此,表达式的值不能为NULL 。由于这个原因,人员表的id, age和takwork列已经被定义为非空(NOT NULL)。

除了可以根据人员年龄分割表数据外,你还可以使用一个基于两个DATE (日期)中的一个的表达式来分割表数据。例如,假定你想基于每个人员入职公司的年份来分割表,也就是说,YEAR(takwork)的值。
CREATE TABLE person(
id INT NOT NULL,
name VARCHAR(100),
age INT NOT NULL,
takWork DATE NOT NULL
)
PARTITION BY RANGE(YEAR(takWork))(
PARTITION p0 VALUES LESS THAN(1990),
PARTITION p1 VALUES LESS THAN(2000),
PARTITION p2 VALUES LESS THAN(2010),
PARTITION p3 VALUES LESS THAN maxvalue
);

RANGE分区在如下场合特别有用:
当需要删除“旧的”数据时。如果你使用上面最近的那个例子给出的分区方案,你只需简单地使用 “ALTER TABLE employees DROP PARTITION p0;”来删除所有在1990年前就已经入职的人员信息。对于有大量行的表,这比运行一个如“DELETE FROM personWHERE YEAR(takWork) <= 1990;”这样的一个DELETE查询要有效得多。
想要使用一个包含有日期或时间值,或包含有从一些其他级数开始增长的值的列。
经常运行直接依赖于用于分割表的列的查询。例如,当执行一个如“SELECT COUNT(*) FROM personWHERE YEAR(takWork) = 2000;”这样的查询时,MySQL可以很迅速地确定只有分区p2需要扫描,这是因为余下的分区不可能包含有符合该WHERE子句的任何记录。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值