肥宅钓鱼网
当前位置: 首页 钓鱼百科

mysql分区表每天新增(MySQL按月自动创建分区表)

时间:2023-08-13 作者: 小编 阅读量: 3 栏目名: 钓鱼百科

mysql分区表每天新增?对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实际上是通过对一组底层表的对象封装,但对SQL层来说是一个完全封装底层的黑盒子。MySQL实现分区的方式也意味着索引也是按照分区的子表定义,没有全局索引。分区表的好处是1、可以让单表存储更多的数据。

mysql分区表每天新增?对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实际上是通过对一组底层表的对象封装,但对SQL层来说是一个完全封装底层的黑盒子,接下来我们就来聊聊关于mysql分区表每天新增?以下内容大家不妨参考一二希望能帮到您!

mysql分区表每天新增

什么是表分区?

对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实际上是通过对一组底层表的对象封装,但对SQL层来说是一个完全封装底层的黑盒子。

MySQL实现分区的方式也意味着索引也是按照分区的子表定义,没有全局索引

分区的意思是指将同一表中不同行的记录分配到不同的物理文件中,几个分区就有几个.idb文件。MySQL数据库的分区是局部分区索引,一个分区中既存了数据,又放了索引。也就是说,每个区的聚集索引和非聚集索引都放在各自区的(不同的物理文件)。

分区表的好处是

1、可以让单表存储更多的数据

2、分区表的数据更容易维护,可以通过删除与那些数据有关的分区,更容易删除数据,也可以增加新的分区来支持新插入的数据。另外,还可以对一个独立分区进行优化、检查、修复等操作。

3、部分查询能够从查询条件确定只落在少数分区上,查询速度会很快

4、通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量

新建分区表

-- 假设有个表叫tmp_logs,设置分区条件为按end_time按月分区DROP TABLE IF EXISTS `tmp_logs`;CREATE TABLE `tmp_logs` (`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,`start_time` datetime NOT NULL,`end_time` datetime NOT NULL,`memo` varchar(128) CHARACTER SET utf8mb4 NOT NULL,PRIMARY KEY (`id`,`end_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8PARTITION BY RANGE (TO_DAYS(end_time))(PARTITION p_202112 VALUES LESS THAN (TO_DAYS('2022-01-01')),PARTITION p_202201 VALUES LESS THAN (TO_DAYS('2022-02-01')),PARTITION p_202202 VALUES LESS THAN (TO_DAYS('2022-03-01')),PARTITION p_202203 VALUES LESS THAN (TO_DAYS('2022-04-01')));

存储过程,每月创建新的分区

-- create_table_partition 为创建表分区,调用后为该表创建到下月结束的表分区DELIMITER $$DROP PROCEDURE IF EXISTS create_table_partition$$CREATE PROCEDURE `create_table_partition`(IN `table_name` varchar(64))BEGINSET @next_month = CONCAT(date_format(date_add(now(),interval 2 month),'%Y-%m'),'-01');SET @next_p = CONCAT(date_format(date_add(now(),interval 1 month),'%Y%m') );SET @SQL = CONCAT( 'ALTER TABLE `', table_name, '`', ' ADD PARTITION (PARTITION p_', @next_p, " VALUES LESS THAN (TO_DAYS('", @next_month ,"')) );" );PREPARE STMT FROM @SQL;EXECUTE STMT;DEALLOCATE PREPARE STMT;END$$DELIMITER ;

存储过程,删除历史分区,空间回收

-- delete_table_partition 为删除N月前的表分区,方便历史数据空间回收DELIMITER $$DROP PROCEDURE IF EXISTS delete_table_partition$$CREATE PROCEDURE `delete_table_partition`(`str_table_name` VARCHAR(64),`int_reserved_month` INT)BEGINDECLARE str_part_name VARCHAR(64);DECLARE DOne INT DEFAULT 0;DECLARE cursor1 CURSOR FOR SELECT partition_name from information_schema.partitions where table_schema = 'webrtc'and table_name=str_table_name and partition_description<=TO_DAYS(CONCAT(date_format(date_sub(now(),interval int_reserved_month month),'%Y-%m'),'-01'));DECLARE CONTINUE HANDLER FORSQLSTATE '02000' SET done = 1;open cursor1;read_loop: LOOPFETCH cursor1 INTO str_part_name ;IF done=1 THENLEAVE read_loop;END IF;SET @SQL = CONCAT( 'ALTER TABLE `', str_table_name, '` DROP PARTITION ', str_part_name, ";" );PREPARE STMT FROM @SQL;EXECUTE STMT;DEALLOCATE PREPARE STMT;END LOOP;CLOSE cursor1;END$$DELIMITER ;

触发器,每月自动新建分区,并删除旧分区

-- 创建一个Event,每个月的一号凌晨1点执行存储过程,自动创建创建表分区,同时最多保存6个月的数据DELIMITER $$CREATE EVENT IF NOT EXISTS `event_records_auto_partition`ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)ON COMPLETION PRESERVE ENABLEDOBEGINcall create_table_partition('tmp_logs');call delete_table_partition('tmp_logs',18);END$$DELIMITER ;

备注,MySQL EVENT 操作事项:

要使定时事件起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1。

1、查看scheduler的当前状态:

SHOW VARIABLES LIKE 'event_scheduler';SELECT @@event_scheduler;

2、修改scheduler状态为打开(0:off , 1:on):

SHOW VARIABLES LIKE 'event_scheduler'; -- 查看是否开启定时器(OFF:关闭,ON:开启)

3、临时打开定时器(四种方法):

a、SET GLOBAL event_scheduler=ON;b、SET @@global.event_scheduler=ON;c、SET GLOBAL event_scheduler=1;d、SET @@global.event_scheduler=1;

4、永久生效的方法,修改配置文件my.cnf

event_scheduler = 1 #或者ON

5、临时开启某个事件

ALTER EVENT ent_test ENABLE;

6、临时关闭某个事件

ALTER EVENT ent_test DISABLE;

    推荐阅读
  • 父亲节适合发的朋友圈

    父亲节到了,祝老爸健康长寿。父亲节,愿天下儿女都别忘记祝福爸爸。每年只有一个父亲节,但是父亲对子女的爱,是朝朝夕夕,时时刻刻的。借父亲节之际,感谢父亲对我的关心、照顾、教导。父亲节到了,愿父亲更多一些快乐,更多一些笑容。黄金白银,珍贵比不上父亲爱心;雪月风花,深情比不上父亲白发;壁立千仞,深刻比不上父亲皱纹;祝天下父亲节日快乐!

  • 别克英朗油箱多少升(你知道吗)

    别克英朗油箱多少升别克英朗油箱容积:44升。别克英朗是别克品牌旗下继新君威、新君越以及昂科雷之后,第四款基于通用最新全球平台生产的车型,老款别克英朗源自欧宝新雅特,出自通用全球DeltaⅡ平台。全新英朗秉承别克“动感流畅”的设计语言,汲取Riviera概念车的经典元素,配有全新飞翼式镀铬进气格栅、展翼型LED自动感应大灯、展翼型LED尾灯、车身双掠峰特征线、超大视野外后视镜、16吋双五辐豪华双色铝合金轮毂。

  • 零首付的车还需要拿什么钱(汽车零首付需要付什么钱)

    零首付的机动车需要缴纳购置税、机动车保险、机动车上牌的费用。零首付是指机动车的交费不用交,机动车正常登记的手续还是要交,否则车辆就不能上路行驶。零首付购买车辆缺少什么手续机动车登记完成后,机动车登记证书由贷款银行或金融机构保管。在贷款没有还清之前,购买者只有机动车使用权。

  • lol云顶之弈阵容搭配艾克(云顶之弈S3艾克主C阵容搭配)

    lol云顶之弈阵容搭配艾克阵容羁绊源计划拥有装备的源计划获得30/75攻击力和300/750生命值。剑士剑士的攻击有25/50%几率会触发2次额外攻击。女武神女武神的攻击和技能对低于50%生命值的敌人造成暴击效果。刺客战斗开始时,刺客跳到敌人后排,获得持续6秒的50%攻速加成/及击杀后刷新。最后我们选择科技枪提供一定的全能吸血,保证持续作战能力。

  • 目送读后感(聊聊感受)

    目送读后感读龙应台的书,刚开始觉得是清水慢流,娓娓道来她的一些所见所闻。龙应台的《目送》,通篇都是她所看到的此花。读完《目送》,深刻体会到了有一种悲哀是看到父母的逐渐老去;有一种怅然是看到孩子逐渐长大;有一种无奈是看到世界上的不公;有一种欣喜是发现大自然的美。正如书名,我们每一个人的成长都是在目送,我们在目送世间万物的变化,无论是好还是坏,我们都在目送他们沿着一条既定的轨道发展下去,直至毁灭。

  • 固废包括哪些物品(固废具体包括哪些物品)

    下面更多详细答案一起来看看吧!固废包括哪些物品固废主要包括:固体颗粒、垃圾、炉渣、污泥、废弃的制品、破损器皿、残次品、动物尸体、变质食品和人畜粪便等。有些国家把废酸、废碱、废油和废有机溶剂等高浓度的液体也归为固体废弃物。固废是“固体废弃物”的简称,是指人类在生产、消费、生活和其他活动中产生的固态和半固态废弃物质。从固体废弃物与环境、资源和社会的关系分析,固体废弃物具有污染性、资源性和社会性。

  • 清炒菠菜窍门(清炒菠菜有什么小窍门)

    下面希望有你要的答案,我们一起来看看吧!清炒菠菜窍门食材:菠菜、葱、蒜、干辣椒、鸡精、白糖、味极鲜。姜大蒜切成片,切好之后放入盘里,大葱切碎,干辣椒切成段,放入盘中备用。锅里油热下入葱姜蒜炒香,炒香后下入菠菜,翻炒均匀加入食盐,鸡精、白糖提鲜,加入适量的味极鲜,将它翻炒均匀,好了关火装盘。

  • 孩子牙齿烂了怎么办(孩子牙齿烂了有什么方法补救)

    如果牙齿出现了比较剧烈的疼痛,一般是由于有牙齿残渣和牙菌斑附着在牙齿,影响到了牙髓,需要进行根管治疗。儿童根管治疗的方式和成人不同,所用的材料并不会影响到恒牙的长出。补牙之后,注意不要吃坚硬的食物和粘性食物,防止将刚补好的牙粘下。如果儿童的牙齿烂到只剩下牙根,就需要将这颗牙齿拔除。拔牙后如果感觉疼痛,可以在医生的指导下适当口服一些止痛药,并且在饮食上注意,平时要吃一些松软清淡又好消化的食物。

  • 恐龙化石怎么来的(恐龙化石形成原因)

    恐龙化石怎么来的?以下内容希望对你有帮助!恐龙化石怎么来的恐龙死后,身体中的软组织因腐烂而消失,骨骼等硬体组织沉积在泥沙中,处于隔绝氧气的环境下,经过几千万年甚至上亿年的沉积作用,骨骼完全矿物化而得以保存下来。此外恐龙生活时的遗迹,如脚印等有时间也可以石化成化石保存下来。

  • qq炫舞浪漫沙滩在哪(唱吧炫舞热情交友与你相约)

    拥有60%妹子的青春酷炫《唱吧炫舞》是你不可错过的绝佳选择哦!2015全民社交舞蹈手游《唱吧炫舞》已经震撼来袭,超多女性玩家让你告别单身,量身打造新的交友圣地!唱歌跳舞耍朋友,就来《唱吧炫舞》吧!热舞青春,炫丽开启,《唱吧炫舞》带你体验私密社交舞蹈世界!