优化MySQL大数据表水平分区的详细方法
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,下文主要给大家带来优化MySQL大数据表水平分区的详细方法,希望这些文字能够带给大家实际用处,这也是我编辑优化MySQL大数据表水平分区的详细方法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧
千家信息网最后更新 2025年11月08日优化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安全错误
数据库的锁怎样保障安全
网络安全法的基本作用包括
最大的移动网络服务器是什么
银行 网络安全宣传
授权服务器如何关闭
网络安全公司排名全球
网络安全徐洪涛个人资料镇海
网络安全执行计划表
驾校软件开发项目标书案例
软件开发招聘群
雷国华数据库技术
梦幻网络安全
微信支付服务器怎么用
数据中心的服务器按照外型可分为
成都网络安全有名公司
卫健委网络安全应急演练方案
思维导图数据库谁做的
网络安全知识竞赛可以考多少次
网络安全保密技术
鸿蒙os软件开发
网络安全法是一部什么法律吗
物联网网络技术升本科吗
常用linux服务器管理工具
谣言算网络安全吗
水滴ipo 网络安全
2022最新服务器cpu天梯图
加大网络安全监管技术投入
上海驿才网络技术
按列存储的数据库
银川正规软件开发系统
软件开发有什么类型