zoukankan      html  css  js  c++  java
  • Mysql时间范围分区(RANGE COLUMNS方式)

    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' )
    );
  • 相关阅读:
    Eclipse在线安装spring-tool-suit插件
    使用Eclipse构建Maven项目
    uwsgi+flask环境中安装matplotlib
    开启flask调试
    linux进入软连接所指向的原目录
    eclipse打不开,报错 "java was started with exit code=13"
    gnuplot 的安装
    使用tcp_probe时最初没有输出,先卸载后加载模块之后就有了。
    一个简单的socket程序运行与抓包查看
    如何查看文件是dos格式还是unix格式的?
  • 原文地址:https://www.cnblogs.com/kawhileonardfans/p/10966833.html
Copyright © 2011-2022 走看看