优化MySQL大数据表水平分区的详细方法
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,下文主要给大家带来优化MySQL大数据表水平分区的详细方法,希望这些文字能够带给大家实际用处,这也是我编辑优化MySQL大数据表水平分区的详细方法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧
千家信息网最后更新 2025年01月23日优化MySQL大数据表水平分区的详细方法
下文主要给大家带来优化MySQL大数据表水平分区的详细方法,希望这些文字能够带给大家实际用处,这也是我编辑优化MySQL大数据表水平分区的详细方法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。
1. 创建一张分区表
这张表的表字段和原表的字段一摸一样,附带分区
CREATE TABLE `metric_data_tmp` ( id bigint primary key auto_increment, metric varchar(128), datadt datetime not null unqine, value decimal(30, 6)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8partition by range (to_days(DATADT)) ( PARTITION p201811 VALUES LESS THAN (to_days("2018-12-01")), PARTITION p201812 VALUES LESS THAN (to_days("2019-01-01")), PARTITION p201901 VALUES LESS THAN (to_days("2019-02-01")), PARTITION p201902 VALUES LESS THAN (to_days("2019-03-01")),);
2. 将原表数据复制到临时表
直接通过insert语句
insert into metric_data_tmp select * from metric_data;
数据量非常大,可使用select into outfile, Load data file方式导出导入
SELECT * INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',' FROM metric_data;LOAD DATA INFILE 'data.txt' INTO TABLE metric_data_tmp FIELDS TERMINATED BY ',';
3. 重命名分区表和历史表:
rename table metric_data to metric_data_bak;rename table metric_data_tmp to metric_data;
4. 通过数据库的定时任务定时自动创建下月的分区
存储过程
delimiter $$use `db_orbit`$$drop procedure if exists `create_partition_by_month`$$create procedure `create_partition_by_month`(in_schemaname varchar(64), in_tablename varchar(64))begin # 用于判断需要创建的表分区是否已经存在 declare rows_cnt int unsigned; # 要创建表分区的时间 declare target_date timestamp; #分区的名称,格式为p201811 declare partition_name varchar(8); #要创建的分区时间为下个月 set target_date = date_add(now(), interval 1 month); set partition_name = date_format( target_date, 'p%Y%m' ); # 判断要创建的分区是否存在 select count(1) into rows_cnt from information_schema.partitions t where table_schema = in_schemaname and table_name = in_tablename and ifnull(t.partition_name, '') = partition_name; if rows_cnt = 0 then set @sql = concat( 'alter table `', in_schemaname, '`.`', in_tablename, '`', ' add partition (partition ', partition_name, " values less than (to_days('", date_format(DATE_ADD(target_date, INTERVAL 1 month), '%Y-%m-01'), "')) engine = innodb);" ); prepare stmt from @sql; execute stmt; deallocate prepare stmt; else select concat("partition `", partition_name, "` for table `",in_schemaname, ".", in_tablename, "` already exists") as result; end if;end$$delimiter ;
创建定时任务,定时执行存储过程创建分区
DELIMITER $$#该表所在的数据库名称USE `db_orbit`$$CREATE EVENT IF NOT EXISTS `generate_partition_for_metric_data`ON SCHEDULE EVERY 1 MONTH #执行周期,还有天、月等等STARTS '2019-03-15 00:00:00'ON COMPLETION PRESERVEENABLECOMMENT 'Creating partitions'DO BEGIN #调用刚才创建的存储过程,第一个参数是数据库名称,第二个参数是表名称 CALL db_orbit.create_partition_by_month('db_orbit', 'metric_data');END$$DELIMITER ;
5.其他
查看表分区情况的SQL
select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_name='metric_data';
对于以上关于优化MySQL大数据表水平分区的详细方法,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。
数据
名称
数据表
方法
水平
数据库
过程
存储
下文
任务
内容
参数
字段
时间
分区表
历史
周期
实际
废话
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么使用服务器的算力
聊城游戏软件开发哪家靠谱
完善网络安全体系
网络安全法第一章讲的是
扬州智能化网络技术包括什么
平谷区品牌软件开发介绍
工业机器人软件开发平台包括
软件开发需要学高数么
计算机网络技术专业就业环境
潍坊高新公安网络安全大队
数据库时间 格式
四川服务器托管
双簧打麻将软件开发
河北玺喆互联网科技
执法记录仪服务器设备巡检维护
国家需要网络技术人才吗
网络安全信息系统名录管理制度
建筑模板软件开发
潍坊经信委 网络安全
通信技术和网络技术的区别
net系统软件开发
软件开发运行平台的约束
数据库正规化
小规模纳税人软件开发税率
未安装2010数据库引擎
万方数据库怎么查找权威性文献
同类型网站都在一个服务器
银行软件开发对外部门
云计算网络安全问题研究论文
攀克网络技术有限公司