1、创建测试表
CREATE TABLE `t_test` ( `id` INT (11), `dates` DATETIME ); ALTER TABLE t_test ADD PRIMARY KEY (id); ALTER TABLE t_test MODIFY id INT AUTO_INCREMENT;
2、创建一个生成测试数据的存储过程
我这里是生成n条2018年的数据(这个生成的时间有bug、我这里不管了,只是用来测试)
DELIMITER // CREATE PROCEDURE `add_vote_memory`(n INT) BEGIN DECLARE i INT DEFAULT 1; DECLARE datess VARCHAR(256); WHILE (i <= n ) DO -- 随机时间 这里生成的都是2018年的 SELECT CONCAT(2018,'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 28)),2,0)) INTO datess; INSERT INTO t_test(dates ) VALUES (datess); SET i=i+1; END WHILE; END //
3、生成测试数据
-- 调用存储过程 生成500000条 CALL add_vote_memory(500000);
4、创建分区表
CREATE TABLE t_range_test ( id INT, dates DATETIME )PARTITION BY RANGE COLUMNS ( dates ) ( -- 第一组小于2018-01-01的 PARTITION p1 VALUES LESS THAN ( '20180101' ), PARTITION p2 VALUES LESS THAN ( '20180201' ), PARTITION p3 VALUES LESS THAN ( '20180301' ), PARTITION p4 VALUES LESS THAN ( '20180401' ), PARTITION p5 VALUES LESS THAN ( '20180501' ), PARTITION p6 VALUES LESS THAN ( '20180601' ), PARTITION p7 VALUES LESS THAN ( '20180701' ), PARTITION p8 VALUES LESS THAN ( '20180801' ), PARTITION p9 VALUES LESS THAN ( '20180901' ), PARTITION p10 VALUES LESS THAN ( '20181001' ), PARTITION p11 VALUES LESS THAN ( '20181101' ), PARTITION p12 VALUES LESS THAN ( '20181201' ), -- 最后一组小于2019-01-01大于2018-12-01的 PARTITION p13 VALUES LESS THAN ( '20190101' ) );
5、把上面测试表的数据插入到分区表中
INSERT INTO t_range_test SELECT * FROM t_test;
6、查看执行计划、结果看PARTITIONS列
EXPLAIN PARTITIONS SELECT * FROM t_range_test WHERE dates >= '20181107124503' AND dates<='20181210111230';
结果:
7、查看表分区状况
-- 查询这个表有多少分区 -- 查询每一个分区对应的数量 SELECT t.`PARTITION_NAME`,t.`SUBPARTITION_NAME`,t.`TABLE_ROWS` FROM information_schema.`PARTITIONS` t WHERE t.`TABLE_NAME` = 't_range_test';
8、重新定义表分区
-- 给表重新定义分区 ALTER TABLE t_range_test PARTITION BY RANGE COLUMNS ( dates ) ( -- 第一组小于2018-01-01的 PARTITION p1 VALUES LESS THAN ( '20180101' ), PARTITION p2 VALUES LESS THAN ( '20180201' ), PARTITION p3 VALUES LESS THAN ( '20180301' ), PARTITION p4 VALUES LESS THAN ( '20180401' ), PARTITION p5 VALUES LESS THAN ( '20180501' ), PARTITION p6 VALUES LESS THAN ( '20180601' ), PARTITION p7 VALUES LESS THAN ( '20180701' ), PARTITION p8 VALUES LESS THAN ( '20180801' ), PARTITION p9 VALUES LESS THAN ( '20180901' ), PARTITION p10 VALUES LESS THAN ( '20181001' ), PARTITION p11 VALUES LESS THAN ( '20181101' ), PARTITION p12 VALUES LESS THAN ( '20181201' ), PARTITION p13 VALUES LESS THAN ( '20190101' ), -- 最后一组小于2020-01-01大于2019-01-01的 PARTITION p14 VALUES LESS THAN ( '20200101' ) );