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

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

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

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;

    推荐阅读
  • 纳兰性德经典诗词一剪梅(纳兰性德春燕诗词六首)

    纳兰性德春燕诗词六首:雨歇春寒燕子家,燕蹴风丝上柳条春分节气前后,是大量燕子从南方飞回北方的时候。燕子的归来,标志着此时的气候,合适燕子的生存和繁殖。只是纳兰性德的遭际和许多人略微两样,因为在他23岁的5月,相处三年的妻子离世,享年二十一岁。深情的纳兰从此生活在丧失情感依赖的巨大痛苦中。这春天的双双燕子,以另一种方式牵起他的隐痛和悲伤。月上桃花,雨歇春寒燕子家。

  • QQ邮箱怎么看草稿箱文件 QQ邮箱的草稿箱在哪里

    查看QQ邮件草稿箱文件内容方法:1、登录QQ邮箱,找到草稿箱,进入需要查看文件的邮件;2、直接点击,文件名字,即可查看文件内容;3、再次点击文件,具体内容,即可查看详细信息,同时还有下载选项。

  • 2020光影上海瑞虹天地灯光节时间+费用+交通

    11月21日起在上海瑞虹天地展出来自多个国家及地区的光影艺术作品,有《IntrudeFamily》、《铅笔刷子PAINTBRUSH&PENCIL》(英国)、《夜语者光影巡游NightTeller》等。交通指南:1、轨道交通:4号线-临平路站;10号线-邮电新村站;2、地面交通:134、875、21、37路均可到达。

  • 小孩子能吃天麻吗(儿童能不能吃天麻)

    如果能够正确的给孩子食用天麻,不仅能够帮助睡眠,还能够增强孩子的记忆力,天麻有着明目的作用。在给孩子吃天麻的时候也需要注意,如果孩子在吃了以后,身体出现任何不良的反应,要立即停止再吃了。对于孩子来说,身体的各方面还没有发育完全,如果吃太多的天麻,可能会出现一些不好的现象,所以一定要控制在一个正常的范围,不要私自的给孩子吃这种药物,而是在医生的指导下服用,才是最合适的。

  • 呢组词两个字 呢组词

    释义:ne:1.用在疑问句的末尾,表示疑问的语气:这个道理在哪儿呢?。你学提琴呢,还是学钢琴呢?。你们劳动力够不够呢?。都到哪儿去了?。他们都有任务了,我呢?

  • 郑州男士美食探店(郑州高颜值潮男潮女在玉米楼吸戴记金汤虾黄)

    现场聚集了近百位郑州餐饮圈的高颜值潮男潮女们,只为与戴记从澳洲远道而来的龙虾来一次亲密接触。2019年,戴记龙虾重新定位:致力于成为中国金汤虾黄第一品牌,用吸金汤虾黄重新定义小龙虾。明知山有虎,偏向虎山行,戴记龙虾提出“金汤虾黄,吸出高颜值”的口号,这无疑对戴记龙虾的选材提出及其严苛的要求。戴记龙虾不仅吸引了郑州高颜值吃货们,连紫虾仙子与至尊宝都经不住诱惑现身现场,只为那一盘错过便追悔莫及的戴记龙虾。

  • 支付宝借呗怎么提升额度(怎样能提升借呗额度)

    支付宝借呗怎么提升额度坚持使用支付宝,保持活跃度官方曾有过回应“支付宝越活跃,对蚂蚁借呗怎么提高额度的帮助越大。”这句话就是圣旨啊朋友们,能用手机支付绝对不用现金,能用支付宝绝对不用微信,下到线下小摊小贩,上到网购、蚂蚁理财、生活缴费和信用卡还款,通通掏出你的支付宝搞定。全面使用支付宝官方又说了,借呗是综合全方面评估的,不会单单只评估某一个方面,一个方面的优秀表现并不会让蚂蚁借呗的额度变高。

  • 高考祝福自己的话简短(给自己的高考祝福语)

    以下内容希望对你有帮助!高考祝福自己的话简短高考一切顺利,超常发挥,金榜题名!一定能考上理想的大学!全国高考日到了,愿你执才高八斗生辉笔,饮才思万千智慧水,带气定神闲满面笑,拥胸中成竹满怀志,书锦绣嫣然好答卷,定折取桂冠来题名。面对目标,信心百倍,人生能有几次搏?面对成绩,心胸豁达,条条大路通罗马。立志高远,脚踏实地;刻苦钻研,勤学苦思;稳定心态,不馁不弃;全力以赴,夺取胜利。

  • 微课传奇能退款吗 微课传奇卖了吗

    据官方报道,如果购买的课时没有效果,微课传奇无效退款。微课传奇是一款心理学教育类APP,由山东龙智信息科技有限公司研发,一款帮助每一位家长学习成长的家庭教育软件。微课传奇推出了微课驿站、微课嘉年华、导师学院、传奇少年领袖营、传奇少年演说班、教培铁班底等线下项目。微课传奇APP设有《岩讲》《家庭教育》《智慧超市》三大版块线上课程。内容涵盖亲子教育、夫妻关系、个人成长等众多垂直细分领域。

  • 2022年全新广汽本田冠道(剑走偏锋的旗舰SUV)

    国内的中型SUV市场,一直被丰田汉兰达占据霸主地位,直到换代福特锐界的杀入,才终于有位对手能从其手上分一杯羹。眼瞅着这两家都赚得盆满钵满,本田也坐不住了,派出冠道来争得一席之地。作为广汽本田的全新旗舰SUV,正式发布之前,大家都以为本田家会直接拿来它在北美销售的Pilot国产,7座对7座,中型对中型,和汉兰达正好“门当户对”。而本田却拿出一台全新研发并且只有5座版的冠道,在体型上依旧和汉兰达相仿。