Bagaimana untuk melaksanakan MySQL untuk meningkatkan partition secara automatik setiap hari

WBOY
Lepaskan: 2023-05-27 14:26:17
ke hadapan
1615 orang telah melayarinya

Kira-kira tiga juta keping data disimpan dalam jadual tb_3a_huandan_detail setiap hari. Pertanyaannya terlalu lambat Saya belajar tentangnya dalam talian dan mendapati bahawa pembahagian jadual boleh dilakukan. Memandangkan data adalah besar, kami memutuskan untuk membuat tugas berjadual untuk membahagikan data secara automatik setiap hari.

1. Sebelum menambah partition secara automatik, anda mesti membahagikan jadual secara manual kepada beberapa partition

ALTER TABLE tb_3a_huandan_detail PARTITION BY RANGE (TO_DAYS(ServiceStartTime))
(
    PARTITION p20160523 VALUES LESS THAN (TO_DAYS('2016-05-23')),
    PARTITION p20160524 VALUES LESS THAN (TO_DAYS('2016-05-24')),
    PARTITION p20160525 VALUES LESS THAN (TO_DAYS('2016-05-25')),
    PARTITION p20160526 VALUES LESS THAN (TO_DAYS('2016-05-26')),
    PARTITION p20160527 VALUES LESS THAN (TO_DAYS('2016-05-27'))
)
Salin selepas log masuk

2. Pembahagian disimpan seperti berikut:

DELIMITER $$

USE `nres`$$

DROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$

CREATE DEFINER=`nres`@`%` PROCEDURE `create_Partition_3Ahuadan`()
BEGIN
/* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
    DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
    START TRANSACTION;

/* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
    SELECT REPLACE(partition_name,'p','') INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
    WHERE table_name='tb_3a_huandan_detail' ORDER BY partition_ordinal_position DESC LIMIT 1;
     SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
/* 修改表,在最大分区的后面增加一个分区,时间范围加1天 */
    SET @s1=CONCAT('ALTER TABLE tb_3a_huandan_detail ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN (TO_DAYS (''',DATE(@Max_date),''')))');
    /* 输出查看增加分区语句*/
    SELECT @s1;
    PREPARE stmt2 FROM @s1;
    EXECUTE stmt2;
    DEALLOCATE PREPARE stmt2;
/* 取出最小的分区的名称,并删除掉 。
    注意:删除分区会同时删除分区内的数据,慎重 */
    /*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS
    where table_name='tb_3a_huandan_detail' order by partition_ordinal_position limit 1;
    SET @s=concat('ALTER TABLE tb_3a_huandan_detail DROP PARTITION ',@P0_Name);
    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1; */
/* 提交 */
    COMMIT ;
 END$$

DELIMITER ;
Salin selepas log masuk

3

rreeee

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan MySQL untuk meningkatkan partition secara automatik setiap hari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan