mysql 创建分区出错,Mysql创建分区表

今天看到生产数据库中,其中一个日志表的数据超过130W,并且增长迅速。担心数据过大会影响CR效率(日志表,所以没有删除&更新),想到MYSQL的分区表。创建分区表后,可以将数据根据某一字段进行逻辑分区,为数据表创建多个数据文件,So....效率会高一些。还有个问题就是不影响业务逻辑,代码不用修改,那条数据查询那个分区表,都由MYSQL负责。。所以我就开始。。折腾了!

写在前面

创建分区表时,如果分区字段与主键字段不同,则遇到以下错误

[Err] 1503 - A PRIMARY KEY must include all columns in the table's partitioning function

解决方案1:将分区字段与主键字段作为联合主键,这显然不是正常逻辑,一般都是按照时间字段进行分区,那么时间+ID进行联合主键是什么鬼。所以我们还有个妥协方案

解决方案2:将主键删除,创建索引,加上自增属性,创建分区,Well done。

开始

删除主键,创建索引

alter table [table_name] drop primary key , ADD INDEX([primary key name]);

创建自增字段

ALTER TABLE [table_name] MODIFY COLUMN `[primary key name]` int(11) NOT NULL AUTO_INCREMENT FIRST ;

关键的来了!!

ALTER TABLE rpt_log PARTITION BY RANGE (to_days(receive_time)) (

PARTITION rpt_log_17_2 VALUES LESS THAN (to_days('2017-2-1')),

PARTITION rpt_log_17_3 VALUES LESS THAN (to_days('2017-3-1')),

PARTITION rpt_log_17_4 VALUES LESS THAN (to_days('2017-4-1')),

...

...

...

PARTITION rpt_log_max VALUES LESS THAN MAXVALUE);

PARTITION log_17_2 VALUES LESS THAN (to_days('2017-2-1')),

这一句表明,如果时间小于“2017-02-01”则放入“log_17_2”中,你也可以设定多个时间,到永远。。当然,如果永远还不够远怎么办?MAXVALUE来帮你

PARTITION log_max VALUES LESS THAN MAXVALUE)

那么这一句就不难理解,当超出设置时间,则放入“log_max”中。

语句执行成功了,那么如何验证是否成功呢?这里有个方法,进入MYSQL的DATA目录

b283183c4914

Data.png

可以看到,分区表都建立成功了,并且17_2/17_3已经有数据了。

具体效率怎么样,日后再说!!!

都是原创,有不对的地方,可以联系我,一起探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值