MySQL周分区 生成周分区辅助存储过程

转载自:http://www.cnblogs.com/krisy/archive/2013/01/10/2854918.html

按周分区的建表语句如下:

复制代码
CREATE TABLE `article` (
  `Article_ID` int(11) NOT NULL AUTO_INCREMENT,
  ...
  ...
  `Extracted_Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY `PRIMARYKeyID` (`Article_ID`),
  KEY `AK_Time` (`Extracted_Time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章表'
PARTITION BY RANGE (UNIX_TIMESTAMP(Extracted_Time))
(

  -- 第一个的分区一般是没有数据的, 因为有时候查询某个分区的数据, 会自动去查第一个分区, 为了加快查询速度, 特别设置第一个分区的时间是很久以前的  
  PARTITION P20100101 
VALUES LESS THAN (UNIX_TIMESTAMP('2010-01-01 00:00:00')) ENGINE = InnoDB, 

  PARTITION P20120923
VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-23 00:00:00')) ENGINE = InnoDB, 
  PARTITION P20120930
VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-30 00:00:00')) ENGINE = InnoDB, 
  PARTITION PMaxValue
VALUES LESS THAN MAXVALUE ENGINE = InnoDB

);

复制代码

如果要事先建好未来几年的分区(当然也可以以后用event自动调度存储过程来自动创建分区), 如何去生成分区的语句, 
生成结果如:

PARTITION P20120923VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-23 00:00:00')) ENGINE = InnoDB, 
PARTITION P20120930
VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-30 00:00:00')) ENGINE = InnoDB

... 
生成方法如下, 生成的分区语句保存在表temp_generate_partition_unix_time的字段partition_sentence中

复制代码
drop table temp_generate_partition_unix_time;
create table temp_generate_partition_unix_time(
    id int auto_increment PRIMARY key,
    year_week varchar(10),
    date date,
    unix_time BIGINT,
    partition_sentence varchar(255)
);

CREATE PROCEDURE `sp_generate_partition_unixtime`(week_total_count_in int, begin_date_in varchar(10))
BEGIN
     /***********************************************
              生成周分区数据
      ***********************************************/

     truncate table temp_generate_partition_unix_time;

     set @i=1;
     loop1: WHILE @i<=week_total_count_in DO
         set @date=DATE_ADD(begin_date_in,INTERVAL (@i-1)*7 DAY);
         INSERT into temp_generate_partition_unix_time(year_week,date,unix_time,partition_sentence)
         SELECT YEARWEEK(@date),@date,UNIX_TIMESTAMP(@date),CONCAT('PARTITION P',REPLACE(@date,'-',''),' VALUES LESS THAN (UNIX_TIMESTAMP(''',@date,' 00:00:00'')) ENGINE = InnoDB,');
        set @i=@i+1;
     END WHILE loop1;
END;

call sp_generate_partition_unixtime(180,'2012-09-23');
SELECT * from temp_generate_partition_unix_time;
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值