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

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

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

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;

    推荐阅读
  • 杰然不同原创(杰然不同原创走)

    所以夏天去洗海澡似乎成了居住在海边人的一条不成文的规定,夏天无论如何都至少要洗一两次的海澡的。虽然我们老家有“立秋以后不能去洗海澡”的说法,但是因为现在还是在伏里,所以就想等哪一天温度比较高的时候去一次海边。这样的天最适合去洗海澡了。威海的海岸线占全省的1/3,全国的1/18,号称千里海岸线,所以有众多的天然浴场。

  • 3015代表什么意思(3015代表意思是什么)

    下面更多详细答案一起来看看吧!3015代表什么意思3015代表意思是散了你我的意思,是男女青年谈恋爱中的一种隐晦的表达分手的意思。这属于一种网络数字语言,网络数字语言从网络聊天中产生,用数字代替词语的交流方式,数字代替比直白的说明来的好一些。

  • 权健束昱辉是哪里人(权健大老板束昱辉为什么改名字)

    束昱辉者,原名束必和也。“日”与“立”联合起来表示“新日登位”。原来,束昱辉的心,蛮大呀,要像太阳一样遍洒光辉。别说是神医了,束昱辉除了有钱,连普通医师的执业证书都没有,怎么可能亲自治病救人、救死扶伤?据说,束昱辉的口头禅,是6个字:要做事,先造势。将束必和改名为:束昱辉,并来一个翻天覆地的包装,也是一种天价营销之道吧?

  • 玫瑰金色的cmyk值是多少(玫瑰金色的cmyk值介绍)

    跟着小编一起来看一看吧!玫瑰金色的cmyk值是多少玫瑰金的cmyk值是CMYK。玫瑰金是一种金色偏粉的颜色,所以又称粉色金、红色金。由于这种金属曾经在19世纪初期风行于俄罗斯,因而又称俄罗斯金。75%的金+22.25%的铜+2.75%的银混合之后就可以得到玫瑰金色。

  • 李现个人资料(李现个人资料照片演过哪些电视剧)

    热血青年韩商言,立志为国出战,带领一群年轻选手向世界冠军发起冲击。2011年,出演个人首部电影《万箭穿心》,从而正式进入演艺圈。2013年,出演绿色环保爱情喜剧电影《中国好新郎》。2015年,在青春校园网络剧《睡在我上铺的兄弟》中饰演谢训。2016年,其主演的青春爱情电影《睡在我上铺的兄弟》上映;同年,在悬疑刑侦网络剧《法医秦明》中饰演林涛。2019年,与陈立农联袂主演古装奇幻电影《春江花月夜》。

  • 人体的肝部位主要干什么工作(肝脏是人体的化工厂)

    同时也是身体上最大的实质性器官和消化腺。肝脏是人体最重要的器官之一,参与了多项的重要功能。4滤过激素在内分泌器官中合成,调节机体功能。肝病严重时可紊乱激素平衡,阻碍身体器官正常运转。另外,自行联合服用多种药物可在体内发生相互作用,降低肝脏代谢药物能力,从而引起药物性肝损伤。爱护好肝脏,平时管住嘴,迈开腿,把体重控制在正常范围内;戒掉吸烟酗酒的坏习惯;严格按照医嘱用药,不随意用药。

  • 女装销售最强技巧(怎么销售女装)

    女装销售最强技巧推荐时要有信心,向顾客推荐服装时,营业员本身要有信心,才能让顾客对服装有信任感。对顾客提示商品和进行说明时,应根据顾客的实际客观条件,推荐适合的服装。配合商品的特征。每类服装有不同的特征,如功能、设计、品质等方面的特征,向顾客推荐服装时,要着重强调服装的不同特征。向顾客推荐服装时,要想方设法把话题引到服装上,同时注意观察顾客对服装的反映,以便适时地促成销售。

  • 张一山穿越春秋战国是什么电视剧(了解一下电视剧讲述的故事)

    接下来我们就一起去了解一下吧!张一山穿越春秋战国是什么电视剧是电视剧《夺路而逃》,是由吴林执导的古装喜剧电影。由张一山、何云伟、李菁、朴河宣、房程程、黄阅等人主演,该片于2016年11月11日在中国大陆上映。影片主要讲述了富二代周晓易在自己的父亲去世之后经历了一场超级宿醉,而醒来之后发现与好友们开启了一段似梦非梦的离奇经历的故事。

  • 四个字网名简短(四个字网名简短大全)

    水墨青花适可而止,我来为大家讲解一下关于四个字网名简短?跟着小编一起来看一看吧!四个字网名简短水墨青花适可而止捂耳听风旧事酒浓喜你是癌吥洅瘋狅清风烈酒閞始慬孒只饮半盏无人及你醉挽清风今夕何夕掌心的泪孤人旧梦老街旧人不再联系时光清浅懒癌患者似狗非友贱人配狗执手不离浮生若梦咗鞋佑瑏泪滴成冰一笑而过孤久则安残念成殇風卷殘雲独享寂寞借风吻你随风流浪

  • 手机拍静物的小技巧(用手机怎么拍静物)

    下面内容希望能帮助到你,我们来一起看看吧!手机拍静物的小技巧掌握光线及模式调节,尽量避免在逆光的情况下拍摄,有的手机支持闪光灯功能可以有效补充光线,不过有效距离比较短,适合近距离拍摄时使用。协调手的把持度及拍摄姿势,在拍摄时,右手握机对准拍摄对象,然后用左手托住右手,保持平稳。注意手机与景物的平行。部分手机支持许多模式拍摄,可以根据具体拍摄场景进行模式选择。