mysql 分区

本次的分区并没有用到实际的项目中,因为现有业务数据确实有些小

本次是使用按月进行分区

本次分区发现自己检索两个月间隔的时候会出现去扫描第一个分区

比方说扫描 1月1号到1月30号的数据

会去扫描1月的分区和第一分区

 

解决的方法是添加一个闲置的第一分区,所以即使扫描到了第一分区也不会产生什么消耗,之所以出现数据添加第一分区的情况很大的原因是因为输入数据为null,无法处理就往第一分区里头放了

CREATE TABLE `wd_customer_partition` (
`customer_id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_time` datetime NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '添加时间',
PRIMARY KEY (`customer_id`,`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户表' PARTITION BY RANGE(TO_DAYS(create_time))
(
PARTITION p_null VALUES LESS THAN (0),#这个分区只会存放失败和异常的数据
PARTITION p201601 VALUES LESS THAN (TO_DAYS('2016-01-01')),
PARTITION p201709 VALUES LESS THAN (TO_DAYS('2017-09-30')),
PARTITION p201710 VALUES LESS THAN (TO_DAYS('2017-10-31')),
PARTITION p201711 VALUES LESS THAN (TO_DAYS('2017-11-30')),
PARTITION p201712 VALUES LESS THAN (TO_DAYS('2017-12-31')),
PARTITION p201801 VALUES LESS THAN (TO_DAYS('2018-01-31')),
PARTITION p201802 VALUES LESS THAN (TO_DAYS('2018-02-28')),
PARTITION p201803 VALUES LESS THAN (TO_DAYS('2018-03-31')),
PARTITION p201804 VALUES LESS THAN (TO_DAYS('2018-04-30')),
PARTITION p201805 VALUES LESS THAN (TO_DAYS('2018-05-31')),
PARTITION p201806 VALUES LESS THAN (TO_DAYS('2018-06-30')),
PARTITION p201807 VALUES LESS THAN (TO_DAYS('2018-07-31')),
PARTITION p201808 VALUES LESS THAN (TO_DAYS('2018-08-31')),
PARTITION p201809 VALUES LESS THAN (TO_DAYS('2018-09-30')),
PARTITION p201810 VALUES LESS THAN (TO_DAYS('2018-10-31')),
PARTITION p201811 VALUES LESS THAN (TO_DAYS('2018-11-30')),
PARTITION p201812 VALUES LESS THAN (TO_DAYS('2018-12-31'))
);

在使用分区函数的字段,需要使用datetime类型,而且需要将该字段设置为主键

 

未来查询的时候需要使用该类型,指定数据范围来锁定缩小目标区域

例如使用between

 

posted @ 2018-04-12 20:44  to_simple  阅读(154)  评论(0编辑  收藏  举报