MySQL5.5 自动分区脚本

本文介绍了一种MySQL数据库中自动创建分区的脚本方案。该脚本每15天自动为指定表增加新的分区,以优化查询性能并提高数据管理效率。文章详细描述了存储过程与事件调度的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用说明:

1.此脚本为分区后,定时自动增加分区.(被自动分区的表,一定要先手动分几个区)

2.每隔15天,定时器会执行一个存储过程,对分区日期最后的那天再往后新增15个分区.

3.Script里面Auto_partitions.sql 为存储过程

4.Script里面Timer_event.sql 为定时事件脚本

5.MySQL5.5默认并没有开启EVENT机制,需要在my.cnf文件中添加[mysqld] event_scheduler= ON

7.增加打开文件上线.这个很重要.open_files_limit = 5000


二、分区脚本

DELIMITER ||
DROP PROCEDURE IF EXISTS create_Partition ||
CREATE PROCEDURE create_Partition (IN databaseName VARCHAR(50),IN tableName VARCHAR(50))
L_END:BEGIN     
     DECLARE MAX_PARTITION_DESCRIPTION VARCHAR(255) DEFAULT 0;
     DECLARE P_NAME VARCHAR(255) DEFAULT 0;       
     DECLARE P_DESCRIPTION VARCHAR(255) DEFAULT 0;   
     DECLARE i INT DEFAULT 1;
     DECLARE ISEXIST_PARTITION VARCHAR(255) DEFAULT 0; 
     SELECT PARTITION_NAME INTO ISEXIST_PARTITION FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName  LIMIT 1 ;
      
     IF ISEXIST_PARTITION <=> "" THEN
       SELECT "Partition table not is exist" AS "*****ERROR*****";
       LEAVE  L_END;
     END IF;
 
     SELECT partition_description INTO MAX_PARTITION_DESCRIPTION  FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName ORDER BY partition_description DESC LIMIT 1;
       
       
     IF MAX_PARTITION_DESCRIPTION <=> "" THEN
       SELECT "Partition table is error" AS "*****ERROR*****";
       LEAVE  L_END;
     END IF;

      
    SET MAX_PARTITION_DESCRIPTION = REPLACE(MAX_PARTITION_DESCRIPTION, '\'', '');
    WHILE i <= 15 DO
           SET P_DESCRIPTION = adddate(MAX_PARTITION_DESCRIPTION, INTERVAL i day);
           SET P_NAME = REPLACE(P_DESCRIPTION, '-', '');
           SET @S=CONCAT('ALTER TABLE ',tableName,' ADD PARTITION  (PARTITION p',P_NAME,' VALUES LESS THAN (\'',P_DESCRIPTION,'\'))');
           SELECT @S;
           PREPARE stmt2 FROM @S;
           EXECUTE stmt2;
           DEALLOCATE PREPARE stmt2;
           SET i = i + 1 ;
    END WHILE;          
END L_END;||
DELIMITER ;



# 其中传入参数databaseName为数据库名,参数tableName为表名.


三、添加事件处理  

DELIMITER ||
CREATE EVENT auto_set_partitions
          ON SCHEDULE
          EVERY 15 DAY 
          DO
	  BEGIN
          CALL create_Partition('database_name','table_name');
         /* 如果需要向多个表分区,可以写多个 CALL 调用  
          CALL create_Partition('database_name','table_name');
        */
 END ||
DELIMITER ;

这个事件每隔15天执行一次.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值