mysql 如何给已有表分区
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 如何给已有表分区相关的知识,希望对你有一定的参考价值。
由于之前没有想到数据量会越来越大,没有建立分区,查询速度越来越慢,我想建立一个像Oracle式的range分区来优化表,但是表已经存在,怎么在已有数据的表的基础上建立分区来优化查询速度?
我也在找方法 mysql自从5.1开始就可以表分区了。 参考技术A mysql没有表分区概念,oracle才有表分区! 参考技术B 不知道你说的分区是什么意思? 还是没有搞明白 请说的明白点好么? 参考技术C 试一下 alert命令MySQL对数据表已有表进行分区表
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多一点数据),测试下,删除原来的表。
测试可以正常使用,观察几天天。。
以上是关于mysql 如何给已有表分区的主要内容,如果未能解决你的问题,请参考以下文章