您正在使用IPV4(3.234.210.25)访问本站 您本次共访问本站 1 次
 用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]文明驾车我带头,文明行路我带头,礼貌让座我带头      

【腾讯云】多款云产品1折起,买云服务器送免费机器,最长免费续3个月      
[公益] 节省一分零钱 献出一份爱心 温暖世间真情      
2022年 冬至节 79
2022年 圣诞节 82
2023年 元 旦 89
2023年 春 节 110
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门文章
MySQL每天自动增加分区的实现
内容摘要: 有一个表tb_3a_huandan_detail,每天有300W左右的数据。查询太慢了,网上了解了一下,可以做表分区。由于数据较大,所以决定做定时任务每天执行存过自动进行分区。1、在进行自动增加分区前一定得先对表手动分几个区ALTERTABLEtb_3a_huandan_detailPARTITIONBYRANGE(TO_DAYS(ServiceStartT......
有一个表tb_3a_huandan_detail,每天有300W左右的数据。查询太慢了,网上了解了一下,可以做表分区。由于数据较大,所以决定做定时任务每天执行存过自动进行分区。

1、在进行自动增加分区前一定得先对表手动分几个区

ALTERTABLEtb_3a_huandan_detailPARTITIONBYRANGE(TO_DAYS(ServiceStartTime))

(

PARTITIONp20160523VALUESLESSTHAN(TO_DAYS('2016-05-23')),

PARTITIONp20160524VALUESLESSTHAN(TO_DAYS('2016-05-24')),

PARTITIONp20160525VALUESLESSTHAN(TO_DAYS('2016-05-25')),

PARTITIONp20160526VALUESLESSTHAN(TO_DAYS('2016-05-26')),

PARTITIONp20160527VALUESLESSTHAN(TO_DAYS('2016-05-27'))

)

2、分区存过如下:

DELIMITER$$

USE`nres`$$

DROPPROCEDUREIFEXISTS`create_Partition_3Ahuadan`$$

CREATEDEFINER=`nres`@`%`PROCEDURE`create_Partition_3Ahuadan`()

BEGIN

/*事务回滚,其实放这里没什么作用,ALTERTABLE是隐式提交,回滚不了的。*/

DECLAREEXITHANDLERFORSQLEXCEPTIONROLLBACK;

STARTTRANSACTION;

/*到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护*/

SELECTREPLACE(partition_name,'p','')INTO@P12_NameFROMINFORMATION_SCHEMA.PARTITIONS

WHEREtable_name='tb_3a_huandan_detail'ORDERBYpartition_ordinal_positionDESCLIMIT1;

SET@Max_date=DATE(DATE_ADD(@P12_Name+0,INTERVAL1DAY))+0;

/*修改表,在最大分区的后面增加一个分区,时间范围加1天*/

SET@s1=CONCAT('ALTERTABLEtb_3a_huandan_detailADDPARTITION(PARTITIONp',@Max_date,'VALUESLESSTHAN(TO_DAYS(''',DATE(@Max_date),''')))');

/*输出查看增加分区语句*/

SELECT@s1;

PREPAREstmt2FROM@s1;

EXECUTEstmt2;

DEALLOCATEPREPAREstmt2;

/*取出最小的分区的名称,并删除掉。

注意:删除分区会同时删除分区内的数据,慎重*/

/*selectpartition_nameinto@P0_NamefromINFORMATION_SCHEMA.PARTITIONS

wheretable_name='tb_3a_huandan_detail'orderbypartition_ordinal_positionlimit1;

SET@s=concat('ALTERTABLEtb_3a_huandan_detailDROPPARTITION',@P0_Name);

PREPAREstmt1FROM@s;

EXECUTEstmt1;

DEALLOCATEPREPAREstmt1;*/

/*提交*/

COMMIT;

END$$

DELIMITER;

3、增加定时事件

DELIMITER||

CREATEEVENTPartition_3Ahuadan_event

ONSCHEDULE

EVERY1daySTARTS'2016-05-2723:59:59'

DO

BEGIN

CALLnres.`create_Partition_3Ahuadan`;

END||

DELIMITER;

版权声明:本内容来源于互联网,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:解析MySQL设置当前时间为默认值的方法 下一篇:SQL优化的N种方法
发布日期:2022/8/11
手机扫二维码直达本页
发布时间:19:18:10
点  击:8
录  入:壹家怡园
相关文章
Baidu

YiJiaCMS 6.3.5.220928(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,百度云加速提供加速防护
Copyright©2000-2022