kawhileonardfans

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\' )
);

分类:

技术点:

相关文章: