mysql分区相对于mysql分库分表便利很多,可以对现有的mysql大表添加分区,也可以对已有分区的表扩充分区。
mysql分区常用处理数据边界清晰的案列,入财务报表数据,我们可以按月对报表数据进行分区。
值得注意的是我们再用sql查询时,必须加上开始时间和结束时间的查询条件,将查询区间限制到相应的分区,否则会遍历所有分区。
一、如下案例:我们通过时间字段按月对表数据进行分区创建sql如下:
CREATE TABLE `test_all_summary` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`cost_type` int(2) DEFAULT NULL COMMENT '类型',
`orderid` bigint(18) DEFAULT '0' COMMENT '单号',
`all_amount` bigint(18) DEFAULT '0' COMMENT '总金额',
`start_tm` date NOT NULL COMMENT '日期',
PRIMARY KEY (`id`,`start_tm`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='表'
/*!50100 PARTITION BY RANGE (to_days(start_tm))
(PARTITION p201904 VALUES LESS THAN (737515) ENGINE = InnoDB,
PARTITION p201905 VALUES LESS THAN (737545) ENGINE = InnoDB,
PARTITION p201906 VALUES LESS THAN (737576) ENGINE = InnoDB,
PARTITION p201907 VALUES LESS THAN (737606) ENGINE = InnoDB,
PARTITION p201908 VALUES LESS THAN (737637) ENGINE = InnoDB,
PARTITION p201909 VALUES LESS THAN (737668) ENGINE = InnoDB,
PARTITION p201910 VALUES LESS THAN (737698) ENGINE = InnoDB,
PARTITION p201911 VALUES LESS THAN (737729) ENGINE = InnoDB,
PARTITION p201912 VALUES LESS THAN (737759) ENGINE = InnoDB,
PARTITION p202001 VALUES LESS THAN (737790) ENGINE = InnoDB,
PARTITION p202002 VALUES