MySQL对数据表已有表进行分区表
2017-12-26 10:55
302 查看
对现有的一个表进行创建分区表,并把数据迁移到新表,可以按时间来分区,然后这表不是实时更新,每天有一次插入操作。时间比较充裕,但是服务器上有其他应用,使用较小资源为主要方式。
操作方式
@1 可以使用ALTER TABLE来进行更改表为分区表,这个操作会创建一个分区表,然后自动进行数据copy然后删除原表,猜测服务器资源消耗比较大。类似操作ALTER TABLE tbl_rtdata PARTITION BY RANGE (Month(fld_date)) ( PARTITION p_Apr VALUES LESS THAN (TO_DAYS('2012-05-01')), PARTITION p_May VALUES LESS THAN (TO_DAYS('2012-06-01')), PARTITION p_Dec VALUES LESS THAN MAXVALUE );@2 新建一个和原来表一样的分区表,然后把数据从原表导出,接着倒入新表。(原来的表主键只有id,而我的分区字段是 stsdate, 这里主键要修改为 id,stsdate 联合主键,分区表要求分区字段要是主键或者是主键的一部分)
操作过程
采用第二种方案。先创建分区表,然后导出原表数据,新表名称改为原表名,然后插入,最后建立普通索引。建立分区表CREATE TABLE `apdailysts_p` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `ap_id` INT(11) NOT NULL, `mac` VARCHAR(17) NOT NULL, `liveinfo` LONGTEXT NOT NULL, `livetime` INT(11) NOT NULL, `stsdate` DATE NOT NULL, `lastmodified` DATETIME NOT NULL, PRIMARY KEY (`id`, `stsdate`) ) PARTITION BY RANGE COLUMNS(stsdate) ( PARTITION p0 VALUES LESS THAN ('2016-06-01'), PARTITION p1 VALUES LESS THAN ('2016-07-01'), PARTITION p2 VALUES LESS THAN ('2016-08-01'), PARTITION p3 VALUES LESS THAN ('2016-09-01'), PARTITION p4 VALUES LESS THAN ('2016-10-01'), PARTITION p5 VALUES LESS THAN ('2016-11-01'), PARTITION p6 VALUES LESS THAN ('2016-12-01'), PARTITION p7 VALUES LESS THAN ('2017-01-01'), PARTITION p8 VALUES LESS THAN ('2017-02-01'), PARTITION p9 VALUES LESS THAN ('2017-03-01'), PARTITION p10 VALUES LESS THAN ('2017-05-01'), PARTITION p11 VALUES LESS THAN ('2017-06-01'), PARTITION p12 VALUES LESS THAN ('2017-07-01'), PARTITION p13 VALUES LESS THAN ('2017-08-01'), PARTITION p14 VALUES LESS THAN ('2017-09-01'), PARTITION p15 VALUES LESS THAN MAXVALUE );
mysqldump -u dbname -p --no-create-info dbname apdailysts > apdailysts.sql修改表名,导入数据(10分钟就导入完了,200w, 8g多一点数据),测试下ok,删除原来的表。测试可以正常使用,收工,观察2天。。– 10.16通过这两天的观察,页面的查询速度从打不开到基本可以秒开的速度了,这个优化是成立的。
相关文章推荐
- MySQL对已有数据的表进行分区表
- MySQL对数据表已有表进行分区表
- MySQL对数据表已有表进行分区表
- Mysql对已有数据表进行分区
- 对已有数据的mysql表进行分区的最佳实践
- [转]mysql在已有无分区表增加分区,mysql5.5才有,可以是innodb_file_per_table关闭状态.
- mysql if对数据进行处理 having对数据进行查询 thinkphp中的exp支持更复杂的where查询
- MySQL系列第四篇:利用MySQL工具之SQLYog进行数据导入
- SQLServer 2005 海量数据解决方案(分区表)与对已存在的表进行分区
- mysql更改已有数据表的字符集,保留原有数据内容
- 使用canal进行mysql数据同步到Redis
- c/c++ 连接mysql,并进行数据查询
- MySQL对数据库数据进行复制的基本过程详解
- MySQL对数据表进行分组查询(GROUP BY)
- 结合mysqlbinlog与mysqldump进行MySQL数据备份与恢复(适用于较小的数据量)
- 用hibernate进行MYSQL数据存储时遇到的中文编码问题及其解决方
- MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程
- linux 命令行对mysql数据进行备份和还原
- sqoop (Hadoop(Hive)与传统的数据库(mysql..)间进行数据的传递工具) 基础概念
- MySQL的源码安装及使用UDFs进行数据自动更新的教程