mysql column分区,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';

结果:

a507f5c36657f10f266d07467b373a42.png

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

);

标签:01,LESS,PARTITION,RANGE,VALUES,Mysql,test,THAN,COLUMNS

来源: https://www.cnblogs.com/kawhileonardfans/p/10966833.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值