欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL按月自動(dòng)設(shè)置表分區(qū)的實(shí)現(xiàn)

 更新時(shí)間:2024年08月08日 09:44:50   作者:LaFeng233  
本文主要介紹了MySQL按月自動(dòng)設(shè)置表分區(qū)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

開始檢查

首先,確保 ticket_history_info表是一個(gè)分區(qū)表。如果未設(shè)置分區(qū),需要修改表結(jié)構(gòu)以支持分區(qū),將 ticket_history_info 表設(shè)置為按日期范圍進(jìn)行分區(qū)

ALTER TABLE ticket_history_info
PARTITION BY RANGE (TO_DAYS(CALL_DATE)) (
    PARTITION p0 VALUES LESS THAN (TO_DAYS('2022-09-01'))
);

1.創(chuàng)建分區(qū)函數(shù)

-- 創(chuàng)建分區(qū)函數(shù)
DELIMITER //
CREATE FUNCTION get_partition_name(p_date DATE)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
    DECLARE p_month VARCHAR(2);
    DECLARE p_year VARCHAR(4);
    SET p_month = LPAD(MONTH(p_date), 2, '0');
    SET p_year = YEAR(p_date);
    RETURN CONCAT('p', p_year, p_month); 
END//
DELIMITER ;

檢查是否成功創(chuàng)建函數(shù)

SHOW FUNCTION STATUS LIKE 'get_partition_name';

2.創(chuàng)建存儲過程,用于自動(dòng)生成分區(qū)

-- 存儲過程
DELIMITER //
CREATE PROCEDURE create_monthly_partition()
BEGIN
    DECLARE next_month VARCHAR(20);
    DECLARE next_month_first_day DATE;
    
    -- 計(jì)算下一個(gè)月份的名稱和下個(gè)月的第一天
    SET next_month = CONCAT('p', DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y%m'));
    SET next_month_first_day = LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) + INTERVAL 1 DAY;
    
    -- 檢查分區(qū)是否已存在
    IF NOT EXISTS (
        SELECT NULL
        FROM information_schema.PARTITIONS
        WHERE TABLE_NAME = 'ticket_history_info' AND TABLE_SCHEMA = 'ccm' AND PARTITION_NAME = next_month
    ) THEN
        -- 創(chuàng)建新的分區(qū)
        SET @sql = CONCAT('ALTER TABLE ticket_history_info ADD PARTITION (PARTITION ', next_month, ' VALUES LESS THAN (TO_DAYS(\'', next_month_first_day, '\')))');

        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
END//
DELIMITER ;

 進(jìn)行測試

 檢查是否成功創(chuàng)建函數(shù)

SHOW PROCEDURE STATUS LIKE 'create_monthly_partition';

執(zhí)行函數(shù)

CALL create_monthly_partition();

查詢表分區(qū),查看是否成功分區(qū)。

SELECT PARTITION_NAME FROM information_schema.PARTITIONS WHERE TABLE_NAME = '表名' AND TABLE_SCHEMA = '數(shù)據(jù)庫名';

可通過修改本地系統(tǒng)時(shí)間,來進(jìn)行反復(fù)測試是否可按照月份進(jìn)行分區(qū)。

返回成功,顯示已創(chuàng)建表分區(qū)。

3.創(chuàng)建自動(dòng)刪除半年以前的表空間函數(shù)

DELIMITER //

CREATE PROCEDURE delete_old_partitions()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE drop_partition_name VARCHAR(64);
    DECLARE cur CURSOR FOR 
        SELECT PARTITION_NAME 
        FROM information_schema.PARTITIONS 
        WHERE TABLE_SCHEMA = '數(shù)據(jù)庫名' 
          AND TABLE_NAME = 'ticket_history_info' 
          AND PARTITION_DESCRIPTION < TO_DAYS(NOW() - INTERVAL 6 MONTH);
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;

    read_loop: LOOP
        FETCH cur INTO drop_partition_name;
        IF done THEN
            LEAVE read_loop;
        END IF;
        SET @sql = CONCAT('ALTER TABLE ticket_history_info DROP PARTITION ', drop_partition_name);
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP;

    CLOSE cur;

   -- 刪除超過半年的數(shù)據(jù)
    DELETE FROM ticket_history_info_copy1
    WHERE CALL_DATE < CURDATE() - INTERVAL 6 MONTH;

END//

DELIMITER ;

4.創(chuàng)建調(diào)度任務(wù),修改到每月最后一天執(zhí)行執(zhí)行存儲過程

CREATE EVENT IF NOT EXISTS monthly_partition_event
ON SCHEDULE EVERY 1 MONTH
STARTS CONCAT(DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-'), DAY(LAST_DAY(CURRENT_DATE)), ' 23:00:00')
DO
BEGIN
    CALL create_monthly_partition();
    CALL delete_old_partitions();
END;

查看事件調(diào)度器是否啟動(dòng)

SET GLOBAL event_scheduler = ON;

查看事件

SHOW EVENTS;

SHOW EVENTS FROM `數(shù)據(jù)庫名`;

創(chuàng)建成功

5.進(jìn)行測試

插入測試數(shù)據(jù)進(jìn)行測試,根據(jù)CALL_DATE字段進(jìn)行數(shù)據(jù)分區(qū),

INSERT INTO ticket_history_info (CALL_DATE, SRC_ADD, CALLING_NUM, DURATION) VALUES
('2024-05-24 00:00:00', 'Address1', '1234567890', 60),
('2024-06-20 00:00:00', 'Address2', '0987654321', 120),
('2024-05-10 00:00:00', 'Address3', '1122334455', 180),
('2024-10-01 00:00:00', 'Address4', '5566778899', 240);

-查詢每個(gè)分區(qū)的行數(shù)

SELECT PARTITION_NAME, TABLE_ROWS
FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = 'ccm' AND TABLE_NAME = 'ticket_history_info';

或者單獨(dú)查詢某一個(gè)分區(qū)的數(shù)據(jù)

SELECT *
FROM ticket_history_info PARTITION (p202406);

到此這篇關(guān)于MySQL按月自動(dòng)設(shè)置表分區(qū)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 表分區(qū)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • MySQL如何實(shí)現(xiàn)快速插入大量測試數(shù)據(jù)

    MySQL如何實(shí)現(xiàn)快速插入大量測試數(shù)據(jù)

    這篇文章主要介紹了MySQL如何實(shí)現(xiàn)快速插入大量測試數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • CentOS 7下使用RPM安裝mysql5.7.13

    CentOS 7下使用RPM安裝mysql5.7.13

    這篇文章主要為大家詳細(xì)介紹了CentOS 7下使用RPM安裝mysql5.7.13的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 探究MySQL中索引和提交頻率對InnoDB表寫入速度的影響

    探究MySQL中索引和提交頻率對InnoDB表寫入速度的影響

    這篇文章主要介紹了MySQL中索引和提交頻率對InnoDB表寫入速度的影響,作者通過實(shí)際測試運(yùn)行時(shí)間的對比來驗(yàn)證,需要的朋友可以參考下
    2015-05-05
  • Mysql索引類型與基本用法實(shí)例分析

    Mysql索引類型與基本用法實(shí)例分析

    這篇文章主要介紹了Mysql索引類型與基本用法,結(jié)合實(shí)例形式分析了Mysql索引類型中普通索引、唯一索引、主鍵索引、組合索引、全文索引基本概念、原理與使用方法,需要的朋友可以參考下
    2020-06-06
  • MySQL如何從不固定位置提取字符串元素詳解

    MySQL如何從不固定位置提取字符串元素詳解

    這篇文章主要給大家介紹了關(guān)于MySQL如何從不固定位置提取字符串元素的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • percona-toolkit對MySQL的復(fù)制和監(jiān)控類操作教程

    percona-toolkit對MySQL的復(fù)制和監(jiān)控類操作教程

    這篇文章主要介紹了使用percona-toolkit對MySQL進(jìn)行復(fù)制和監(jiān)控類操作的教程,percona-toolkit是一款強(qiáng)大的MySQL輔助軟件,需要的朋友可以參考下
    2015-11-11
  • 常見的數(shù)據(jù)庫1045密碼錯(cuò)誤問題解決方法

    常見的數(shù)據(jù)庫1045密碼錯(cuò)誤問題解決方法

    連接MySQL數(shù)據(jù)庫時(shí)難免會(huì)遇到1045錯(cuò)誤,主要是因?yàn)橛脩糨斎氲挠脩裘蛎艽a錯(cuò)誤被拒絕訪問,下面這篇文章主要給大家介紹了關(guān)于常見的數(shù)據(jù)庫1045密碼錯(cuò)誤問題的解決方法,需要的朋友可以參考下
    2023-04-04
  • 在ubuntu中重置mysql服務(wù)器root密碼的方法

    在ubuntu中重置mysql服務(wù)器root密碼的方法

    在ubuntu下安裝了mysql 5 server,結(jié)果不知道什么原因,安裝時(shí)輸入的root帳號密碼在使用時(shí)無論如何都不能通過數(shù)據(jù)庫服務(wù)器的驗(yàn)證。無奈只有重置mysql的root帳號密碼。查了一下,用了以下方法成功的重置了root帳號密碼
    2012-10-10
  • MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的語句

    MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的語句

    MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的方法,需要的朋友可以參考下。
    2009-12-12
  • Mysql 的存儲引擎,myisam和innodb的區(qū)別

    Mysql 的存儲引擎,myisam和innodb的區(qū)別

    這篇文章主要介紹了Mysql 的存儲引擎,myisam和innodb的區(qū)別,需要的朋友可以參考下
    2014-12-12

最新評論