MySQL大数据表程度分区优化的细致步骤【MySQL教程】,mysql
作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:16评论:0
导读:本篇文章给人人带来的内容是关于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=utf8 partition 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 PRESERVE ENABLE COMMENT '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大数据表程度分区优化的细致步骤的细致内容,更多请关注ki4网别的相干文章!
标签:mysql
相关推荐
- 如何修改mysql的默认时区_MySQL教程,mysql,时区
- mysql数据库如何创建数据表_MySQL教程,mysql,数据表
- linux源码安装mysql5.7_MySQL教程,linux,mysql,mysql5.7
- mysql外键约束怎么写_MySQL教程,mysql,外键约束
- mysql如何设置字符集为UTF8_MySQL教程,mysql,UTF8,字符集
- mysql怎么创建数据库_MySQL教程,mysql,数据库
- 如何查看mysql的日志文件_MySQL教程,mysql,日志文件
- mysql如何删除表中一行数据?_MySQL教程,mysql
- access是数据库管理系统吗_MySQL教程,access,mysql
- mysql修改字段类型有哪些?_MySQL教程,mysql,修改字段
你 发表评论:
欢迎- MySQL教程排行
-
- 1mysql索引介绍_MySQL教程,mysql,索引,介绍
- 2Mysql如何挂盘_MySQL教程,Mysql
- 3mysql实现linux下数据库目录迁移_MySQL教程,mysql,linux,数据库,目录,迁移
- 4mysql中key 、primary key 、unique key 与index区别详解_MySQL教程,mysql
- 5分离数据库和附加数据库的区别_MySQL教程,数据库
- 6关于linux下mysql去除严格模式_MySQL教程,linux
- 7利用mysql生成唯一序号_MySQL教程,mysql
- 8mysql实现大量数据转换为数组_MySQL教程,mysql,数据,转换,数组
- 9linux下搭建mysql主从服务器_MySQL教程,linux,搭建,mysql,主从,服务器
- 最新文章
- 广而告之