我不知道为什么我的脚本不能工作!我开发了对表进行分区的过程。我已经使用scheduler运行了该过程,但没有创建分区。
我想每个月做一个分区表,作为程序中的变量months_future。因此我用了“while”。
有人能帮我吗??
这是有程序的。
DELIMITER $$
DROP PROCEDURE IF EXISTS CreatePartitions $$
-- Procedure to delete old partitions and create new ones based on a given date.
-- enough new partitions will be made to cover until (today_date + days_future)
CREATE PROCEDURE CreatePartitions (dbname TEXT, tblname TEXT, months_future INT)
BEGIN
DECLARE curdate date;
DECLARE newpart_date date;
DECLARE partition_table_name varchar(50);
DECLARE i INT;
SELECT CURDATE()
INTO curdate;
SELECT 1 INTO i;
WHILE(i <= months_future)
DO
SET partition_table_name = CONCAT('p_',CAST(((curdate + INTERVAL i MONTH)+0) as char(6)));
IF NOT EXISTS (
SELECT *
FROM information_schema.PARTITIONS
WHERE TABLE_NAME=tblname
AND TABLE_SCHEMA=dbname
AND PARTITION_NAME = partition_table_name
)
THEN
SET @sql := CONCAT('ALTER TABLE '
, tblname
, ' ADD PARTITION (PARTITION '
, partition_table_name
, ' VALUES LESS THAN ('
,'\''
, DATE_FORMAT(DATE_ADD(curdate, INTERVAL i + 1 MONTH), '%Y%m01')
,'\''
, '));');
SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
SET i = i + 1;
END WHILE;
END $$
DELIMITER ;发布于 2021-08-19 23:35:46
不要在将来构建多个分区;这会减慢速度。只需在需要分区的前一天为下个月构建分区。另外,保留一个future分区,以防处理无法及时构建该分区。
更多讨论请点击这里:http://mysql.rjweb.org/doc.php/partitionmaint
请注意,只有当您打算通过fast DROP PARTITION而不是慢速DELETE清除“旧”数据时,才能使用每月分区。
https://stackoverflow.com/questions/68843322
复制相似问题