매일 자동으로 파티션을 늘리도록 MySQL을 구현하는 방법

WBOY
풀어 주다: 2023-05-27 14:26:17
앞으로
1604명이 탐색했습니다.

tb_3a_huandan_detail 테이블에는 매일 약 300만 개의 데이터가 저장됩니다. 쿼리가 너무 느립니다. 온라인에서 배웠고 테이블 파티셔닝이 가능하다는 것을 알았습니다. 데이터가 크기 때문에 매일 실행되고 자동으로 분할되도록 예약된 작업을 수행하기로 결정했습니다.

1. 자동으로 파티션을 추가하기 전에 먼저 테이블을 여러 개의 파티션으로 나누어야 합니다

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'))
)
로그인 후 복사

2. 파티션은 다음과 같이 저장됩니다.

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 ;
로그인 후 복사

3.

위 내용은 매일 자동으로 파티션을 늘리도록 MySQL을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿