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

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;

    推荐阅读
  • 苹果手机一卡通能去网点充值吗(苹果手机一卡通充值失败)

    下面更多详细答案一起来看看吧!苹果手机一卡通能去网点充值吗最近发现苹果手机上的地铁一卡通充值失败,仅提示“未完成付款”。大家试一下,升级一卡通后,再试试充值。

  • 微信上怎么批量删人(如何快速批量删除微信好友)

    下面内容希望能帮助到你,我们来一起看看吧!微信上怎么批量删人利用微信自有功能,适用于网友多,活跃的用户。首先打开微信,进入我的,设置,通用,辅助功能。在辅助功能中找到群发助手,我们新建群发。全选好友或者选择部分我们想要删除的好友,发送群体消息:“号不用了,请删除”之类的话。

  • 金庸亲口承认的第一高手阿青(金庸笔下最强三人)

    目前众多金迷比较公认的,金庸笔下最强三人:“阿青、扫地僧、石破天”。阿青能瞬息击落二千越甲剑士兵器,可见其剑术之强大,当世无可匹敌!阿青的速度和剑术都是难以超越的。此时的石破天已初窥灵魂出窍,其攻击已可在不经意间隔空化石为粉。在救史婆婆和阿秀跳崖自尽时,石破天那惊人的跨海一跃,更是突破了武学轻功的范畴。所以石破天的全无招境胜阿青的剑无招境。

  • 成语霜露之病是什么意思(霜露之病的意思是什么)

    四十岁时开始学习《春秋》,六十岁时,汉武帝广招天下贤良文学之士,公孙弘被征为博士。七十六岁时公孙弘当了丞相,封平津侯。虽然贵为三公,但公孙弘生活却很简朴,每顿饭只有一个荤菜,把自己的俸禄都给了故人宾客,家里没有什么余财。他觉得自己关键时刻不能给国家出力,给汉武帝上书请求辞职。不久,公孙弘的病好了,就又上朝理事了。

  • 微波炉解冻怎么操作(微波炉解冻的方法)

    微波炉解冻怎么操作?接下来我们就一起去了解一下吧!微波炉解冻怎么操作首先需要将微波炉通上电,然后把微波炉调整到解冻按钮,再将食物放进去,最后再设定好解冻时间,按下开始键即可;一般解冻时间只需要3分钟,若解冻物品较大,时间可以长一些,但不要超过10分钟,要不然会让食物在解冻的时候受损,影响到进食的效果。

  • 购买猪肉出怪事(买猪肉被骗)

    近日,有网友发布视频称:在甘州区新乐超市购买的猪肉存在质量问题。5月13日,甘州区动物卫生监督所就该问题进行了专项调查。在调查过程中,新乐超市踊跃提供了当日销售肉品的《肉品品质检验合格证》和《动物检疫合格证明(产品B)》,经现场核查,手续齐全,进货渠道正规。而后通过几经辗转,找到了当事人,并对其购买的猪肉进行了鉴辞。凡是“两证两章一报告”手续齐全的肉品,消费者可放心购买。

  • qq删除好友会自动屏蔽对方吗 qq删除好友会自动屏蔽对方吗

    qq删除好友后,不会自动屏蔽对方。qq删除好友、屏蔽好友的具体介绍如下:1、删除好友:如果将对方删除了之后,就会从对方的好友列表中消失,对方不会收到任何提示。如果对方采取换号等方式频繁骚扰,可以在设置中举报对方,qq工作人员会根据严重程度,处罚对方。

  • 疫情洗礼过后,更能看见家居软装独角兽的诞生势态

    独角兽一词在各行各业中频繁出现,唯独软装行业迟迟未出现一个可以匹配独角兽概念的企业。靠单一产品或是垂直环节生存的品牌将会越发艰难。而20开年的疫情爆发,不仅让大多品牌濒临倒闭,也让消费者对生活状态有了新的思考与认知。不想再费神费脑的去选择、甄别与决策,疫情过后也更着重空间的使用与体验。经过上半年的行业洗牌,不是高起点,排他性的企业,生存空间非常艰巨。在未来很有可能成为*独角兽型品牌。

  • 脾胃虚弱的人芋头怎么吃(芋头健脾消食佳品)

    芋头是生活中常见的食物,也是药食两用的食物。肠胃不好的人应该多吃一些芋头中医记载,芋头可以健脾消食,促进消化吸收,增强人体营养。因为芋头入脾胃经,可补益脾土,增强脾胃消化功能。熟了的芋头皮不会引起皮肤的瘙痒,可以直接用手剥去外皮。戴手套去皮在给芋头去皮时可以戴上塑料手套,这样芋头的黏液就不能直接接触到手上的皮肤,不会引起皮肤瘙痒。

  • 国美电器卖场企业影响 国美电器经营情况

    公告称,陈晓辞去国美董事会主席、执行董事、执行委员会成员兼主席及授权代表职务,自2011年3月10日起生效,以及孙一丁先生辞任国美电器执行董事,自2011年3月10日起生效。3月16日凌晨消息,国美电器针对“央视3.15晚会所曝光问题”发布声明。声明中称,国美将全面对出现问题的门店进行有效整改,并将对消费者进行全面回访,对发现因此造成损失的消费者进行补偿。