MySQL每天自動增加分區(qū)的實現(xiàn)
有一個表tb_3a_huandan_detail,每天有300W左右的數(shù)據(jù)。查詢太慢了,網(wǎng)上了解了一下,可以做表分區(qū)。由于數(shù)據(jù)較大,所以決定做定時任務每天執(zhí)行存過自動進行分區(qū)。
1、在進行自動增加分區(qū)前一定得先對表手動分幾個區(qū)
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、分區(qū)存過如下:
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; /* 到系統(tǒng)表查出這個表的最大分區(qū),得到最大分區(qū)的日期。在創(chuàng)建分區(qū)的時候,名稱就以日期格式存放,方便后面維護 */ ? ? 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; /* 修改表,在最大分區(qū)的后面增加一個分區(qū),時間范圍加1天 */ ? ? SET @s1=CONCAT('ALTER TABLE tb_3a_huandan_detail ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN (TO_DAYS (''',DATE(@Max_date),''')))'); ? ? /* 輸出查看增加分區(qū)語句*/ ? ? SELECT @s1; ? ? PREPARE stmt2 FROM @s1; ? ? EXECUTE stmt2; ? ? DEALLOCATE PREPARE stmt2; /* 取出最小的分區(qū)的名稱,并刪除掉 。 ? ? 注意:刪除分區(qū)會同時刪除分區(qū)內(nèi)的數(shù)據(jù),慎重 */ ? ? /*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、增加定時事件
DELIMITER || CREATE EVENT Partition_3Ahuadan_event ? ? ? ? ? ON SCHEDULE ? ? ? ? ? EVERY 1 day STARTS '2016-05-27 23:59:59' ? ? ? ? ? DO ? ? ? BEGIN ? ? ? ? ? CALL nres.`create_Partition_3Ahuadan`; ?END || DELIMITER ;
參考:
http://blog.csdn.net/m582445672/article/details/7670743
http://blog.chinaunix.net/uid-24086995-id-127389.html
到此這篇關(guān)于MySQL每天自動增加分區(qū)的實現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 自動增加分區(qū)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql group_concat 實現(xiàn)把分組字段寫成一行的方法示例
這篇文章主要介紹了mysql group_concat實現(xiàn)把分組字段寫成一行的方法,結(jié)合實例形式分析了group_concat函數(shù)的功能、查詢用法及相關(guān)操作技巧,需要的朋友可以參考下2019-10-10一文弄懂MySQL中redo?log與binlog的區(qū)別
在學習mysql數(shù)據(jù)庫時,不可避免要去接觸到redo log和binlog,好多人對這兩者的概念分不太清,下面這篇文章主要給大家介紹了關(guān)于MySQL中redo?log與binlog區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-02-02MySQL數(shù)據(jù)庫之存儲過程?procedure
這篇文章主要介紹了MySQL數(shù)據(jù)庫之存儲過程?procedure,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06淺析SQL語句行列轉(zhuǎn)換的兩種方法 case...when與pivot函數(shù)的應用
SQL語句行列轉(zhuǎn)換的兩種方法 case...when和pivot函數(shù)應用,運用pivot 函數(shù)只支持數(shù)據(jù)庫版本2005以上的。一般運用case when else end 的方法比較多,比較普遍2013-08-08MySQL數(shù)據(jù)更新操作的兩種辦法(數(shù)據(jù)可視化工具和SQL語句)
MySQL是最常用的數(shù)據(jù)庫,在數(shù)據(jù)庫操作中,基本都是增刪改查操作,簡稱CRUD,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)更新操作的兩種辦法,需要的朋友可以參考下2023-03-03