美文网首页
存储过程自动创建表分区(按时间)

存储过程自动创建表分区(按时间)

作者: 挨板砖的码农 | 来源:发表于2017-09-18 17:16 被阅读0次
  • 存储过程
CREATE PROCEDURE proc_Add_Date_Partition_For_Table(IN BeginDate DATETIME, IN EndDate DATETIME, IN DBName VARCHAR(20),
                                                   IN TableName VARCHAR(50))
  BEGIN

    DECLARE PartitionName varchar(50);
    DECLARE PartitionColumn varchar(50);
    DECLARE PartitionValue Datetime;

    if EndDate is not null then
        select PARTITION_NAME ,REPLACE(PARTITION_EXPRESSION,'`','') as PARTITION_COLUMN,
        str_to_date(SUBSTR(PARTITION_DESCRIPTION FROM 2 FOR 10),'%Y-%m-%d') as PARTITION_VALUE
        into PartitionName,PartitionColumn,PartitionValue
        from INFORMATION_SCHEMA.PARTITIONS where TABLE_SCHEMA=DBName and table_name=TableName
        order by PARTITION_ORDINAL_POSITION desc limit 1;

        IF PartitionValue IS NOT NULL THEN
        SET BeginDate = PartitionValue;
        END IF;

        WHILE BeginDate <= EndDate DO
        set @SqlStr=concat('alter table ',DBName,'.',TableName,
        ' add partition(partition p_',
        DATE_FORMAT(BeginDate,'%Y%m%d'),' values less than('',DATE_FORMAT(DATE_ADD(BeginDate,INTERVAL 1 day),'%Y-%m-%d'),''));');

        PREPARE STMT FROM @SqlStr;
        EXECUTE STMT;   

        SET BeginDate = DATE_ADD(BeginDate,INTERVAL 1 day);
        END WHILE;
    end if;

END;
  • 参数说明
BeginDate 分区起始时间
EndDate  分区截止时间
DBName  数据库名
TableName  表名
  • 创建测试表
CREATE TABLE `test_db`.`test_account` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `mobile` varchar(20) DEFAULT NULL,
  `rdCreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
  PRIMARY KEY (`id`,`rdCreateTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50500 PARTITION BY RANGE  COLUMNS(rdCreateTime)
(PARTITION p_0 VALUES LESS THAN ('2017-09-01') ENGINE = InnoDB) */;
  • 调用存储过程创建分区
call proc_Add_Date_Partition_For_Table('2017-09-02','2019-01-01','test_db','test_account')

相关文章

  • 存储过程自动创建表分区(按时间)

    存储过程 参数说明 创建测试表 调用存储过程创建分区

  • mysql 每月自动创建分区

    每月自动创建分区逻辑,通过创建一个事件定时任务去执行存储过程数据表结构,分区字段必须是主键索引中的字段,这里用时间...

  • Mysql分区表及自动创建分区

    sql语句如下,存储过程支持对指定的库、表,创建未来指定数量的分区;未定义分区定义分区;不会重复创建分区。建议使用...

  • db2表分区

    1. 表分区作用 表分区可扩展表的存储能力、对于大量数据表使用分区字段可提高查询效率。 2. 创建表分区 cre...

  • mysql分区:每天自动添加新分区

    对test数据库中position表按日期(天)分区:需要做: 对已有数据分区 添加过程存储(相当于函数) 添加事...

  • SQL

    结构话数据查询语句 可以创建库,创建表,创建存储过程,创建视图。 可以设置表,存储过程,视图的权限 可以查询数据,...

  • 如何批量新增100万条数据

    新增表 创建存储过程 执行

  • MySQL插入一亿条数据

    创建数据表 创建用户表 创建存储过程 调用存储过程插入一亿条数据 查看表空间 插入数据测试统计 查询测试

  • 别看不起分区表:我要为你点个赞

    分区表带来的性能提升 我们先基于下面的SQL和存储过程创建一张分区表,并插入1亿条记录: 数据插入完成后,还给na...

  • MySQL之:存储过程

    存储过程 存储过程保存在mysql.proc表中 创建存储过程 CREATE PROCEDURE sp_name ...

网友评论

      本文标题:存储过程自动创建表分区(按时间)

      本文链接:https://www.haomeiwen.com/subject/lrmbsxtx.html