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

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;

    推荐阅读
  • 杜兰特受伤倒下了库里怎么了(为何杜兰特离队无进展)

    在自由市场大门刚开启不久后,杜兰特便向篮网提出交易申请,着实引起了外界不小的争议。不过论带队能力,杜兰特对比库里、詹姆斯这些超巨,确实是要逊色不少。不可否认伤病确实是一个客观原因,但在上赛季,篮网在坐拥杜兰特、欧文两大巨星的情况下,在首轮就被凯尔特人淘汰出局,这真的有些说不过去了。所以KD这次在自由市场上遭遇“冷落”,除了筹码确实不能吸引到篮网,很大一部分原因还是球队高管对于杜兰特带队能力的怀疑。

  • 中国影史票房榜(中国影史票房实时榜前十名)

    暌违4年,中国电影票房榜冠军终于再次迎来新的王者。当然,这还不是《长津湖》的最终票房,根据目前它的票房走势,最终成为中国电影第一部突破60亿票房的电影也非常有可能。《泰坦尼克号》3.6亿票房冠军记录一直保持了11年。这2年更是因为疫情的影响,票房数字还在往下掉。吴京也成为卡梅隆之后,中国电影票房史上,仅有的2个先后2次登顶票房榜冠军的电影人。到现在,中国电影票房总榜前十里面9个席位都是国产电影。

  • 大部分的玉都是用来做手镯的吗(人养玉三年玉养人一生)

    而现代人戴玉主要是因为玉好看,很多女性会戴玉手镯,其实戴着玉手镯不仅可以提高自身气质,它对于身体也有一定的作用,俗话说“人养玉三年,玉养人一生”。同时佩戴玉器,还能给人一种很高的品味,无形间,提高了你的魅力。如果养成佩戴玉器的好习惯,带来的好处也是很多的,例如这些。——保护心脏长期佩戴玉手镯对心脏起到呵护作用,能够帮助稳定我们的心率,尤其是对于高血压患者来说能够帮助稳定血压。

  • 最帅抽雪茄镜头(抽雪茄除了姿势要帅外)

    直到现在为止,雪茄已经流行于全世界,而古巴生产的雪茄,被爱好雪茄的人们普遍认为是雪茄中的极品。随着此节目第九季的落幕,2016年5月5日,正式宣布停播,周立波已经在众人心目中没有存在感了。对美国痛恨的古巴特工,曾想着在肯尼迪雪茄中下毒,不过最终没有实现。这是一款口感顺滑的罗伯图型号的雪茄,初段点燃后燃烧良好,浓烈皮革、坚果,到两寸左右位置,皮革味减弱出现土壤味道。

  • 投子认负的投是什么意思(投子认负的投意思是什么)

    以下内容大家不妨参考一二希望能帮到您!投子认负的投是什么意思投子认负的投是将拿起的棋子放回盛棋子的器皿中,表示认输。积竹八棱建於兵车是殳之范式。用手将武器扔向目标以击是投之范式。投靠、投降、投师从师学习、投诉。

  • 海产品里什么补钙最好(这5种水产有助于补钙)

    蟹黄中的胆固醇含量较高。富含钙,钙增加眼球壁的弹力,防治近视的发生与发展。

  • 波神41分奇才轻取森林狼(小波特25分火箭战胜森林狼)

    奇才队结束3连败,森林狼队遭遇3连败。森林狼队的爱德华兹得到29分和8个篮板,诺维尔得到23分和5个篮板,戈贝尔得到19分和7个篮板,拉塞尔得到17分、4个篮板和5次助攻,唐斯只有8分和4次助攻,他在第三节中段扭伤右腿退赛。库兹马和古德温轮流得分,首节结束时奇才队以38-33领先5分。爱德华兹上篮得手,加福德和阿夫迪亚罚中三球稳住局势。里弗斯上篮得手暂时止血,波尔津吉斯连得5分,奇才队继续扩大优势。

  • 吸顶灯闪烁是什么原因(有两个原因)

    接下来我们就一起去了解一下吧!吸顶灯闪烁是什么原因有接触不良的地方,可以检查插头,电线接头等地方排除。LED的驱动电源出现故障,这个只能换,如果你会维修,也可以修。电子镇流器性能变坏了,赶快换新的,电子镇流器性能变坏会连带烧坏灯管,得不尝失,电子镇流器在灯壳内,有卖的,很容易换。

  • 锁屏快捷键(快捷键介绍)

    以下内容大家不妨参考一二希望能帮到您!锁屏快捷键快速的让电脑进入锁屏状态,只需按下快捷键“win+L”,同时按下即可。如果锁屏之后,电脑没有密码,那么也达不到锁屏效果。win10系统可直接搜索控制面板。win7的电脑,可以直接在用户账户里面添加登录密码,而win10则需要点击进入设置界面。

  • 生活中的小镜头为题的作文(小学生优秀作文)

    生活中的小镜头为题的作文小学生优秀作文:生活中的小镜头正所谓:“一花一叶一世界。”生活就好像是一幕幕精彩的电影,时时刻刻地呈现在我们的眼前,而这世界上的所有善良,丑恶,也都被编进了这部名叫“人生”的电影里。“哎呦——谁踩了我的脚!”在某一站又有人上车时,上来了一位年迈的老人。他说完,就扭过头。那一瞬间,车厢内陷入了一片寂静之中。