MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)
有一個(gè)表tb_3a_huandan_detail,每天有300W左右的數(shù)據(jù)。查詢太慢了,網(wǎng)上了解了一下,可以做表分區(qū)。由于數(shù)據(jù)較大,所以決定做定時(shí)任務(wù)每天執(zhí)行存過自動(dòng)進(jìn)行分區(qū)。
1、在進(jìn)行自動(dòng)增加分區(qū)前一定得先對(duì)表手動(dòng)分幾個(gè)區(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
/* 事務(wù)回滾,其實(shí)放這里沒什么作用,ALTER TABLE是隱式提交,回滾不了的。*/
? ? DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
? ? START TRANSACTION;
/* 到系統(tǒng)表查出這個(gè)表的最大分區(qū),得到最大分區(qū)的日期。在創(chuàng)建分區(qū)的時(shí)候,名稱就以日期格式存放,方便后面維護(hù) */
? ? 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ū)的后面增加一個(gè)分區(qū),時(shí)間范圍加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ū)會(huì)同時(shí)刪除分區(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、增加定時(shí)事件
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每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 自動(dòng)增加分區(qū)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL查詢出現(xiàn)1055錯(cuò)誤的原因及解決方法
Mysql在使用過程中經(jīng)常遇到錯(cuò)誤,都是本人在實(shí)際應(yīng)用中處理檢驗(yàn)過的,本文對(duì)常見錯(cuò)誤出現(xiàn)的代碼進(jìn)行詳細(xì)分析,下面這篇文章主要給大家介紹了關(guān)于MySQL查詢出現(xiàn)1055錯(cuò)誤的原因及解決方法,需要的朋友可以參考下2023-05-05
Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn)
在MySQL中,創(chuàng)建新用戶并為其授予權(quán)限是一項(xiàng)常見的操作,本文主要介紹了Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
Centos7 移動(dòng)mysql5.7.19 數(shù)據(jù)存儲(chǔ)位置的操作方法
這篇文章主要介紹了Centos7 移動(dòng)mysql5.7.19 數(shù)據(jù)存儲(chǔ)位置的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-10-10
Mysql誤刪數(shù)據(jù)解決方案及kill語句原理
這篇文章主要介紹了Mysql誤刪數(shù)據(jù)解決方案及kill語句原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
mysql實(shí)現(xiàn)sequence功能的代碼
今天小編就為大家分享一篇關(guān)于mysql實(shí)現(xiàn)sequence功能的代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03

