Mysql千万级自增主键单表改复合主键分区记录

 

场景: 拨号记录表 ,表数据达到1500万后,明显感觉查询速度下降。mysql只支持主键分区,优先测试按主键分区后,对列表查询基本没有起到优化效果,所以将记录产生时间和自增id加入设置成复合主键,然后再按时间进行分区处理。

 


#1.移除现有分区  
alter table clue_call_record remove partitioning;

#2.移除现有主键,以及自增功能
ALTER TABLE `jgb`.`clue_call_record` 
MODIFY COLUMN `id` int(11) NOT NULL COMMENT '主键ID' FIRST;

ALTER TABLE `jgb`.`clue_call_record` 
DROP PRIMARY KEY;
#3.添加 id 与创建时间为复合主键
alter table organization_clue_library add primary key (id,createTime);

# 4.id重新设为自增主键
ALTER TABLE `jgb`.`clue_call_record` 
MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID' FIRST;
    
ALTER TABLE clue_call_record
PARTITION BY RANGE (to_days(createTime)) ( 
PARTITION p201910 VALUES LESS THAN (to_days('2019-10-01')),
PARTITION p201912 VALUES LESS THAN (to_days('2019-12-01')), 
PARTITION p202006 VALUES LESS THAN (to_days('2020-06-01')), 
PARTITION p202008 VALUES LESS THAN (to_days('2020-08-01')), 
PARTITION p202010 VALUES LESS THAN (to_days('2020-10-01')), 
PARTITION p202012 VALUES LESS THAN (to_days('2020-12-01')), 
PARTITION p202102 VALUES LESS THAN (to_days('2021-02-01')), 
PARTITION p202104 VALUES LESS THAN (to_days('2021-04-01')), 
PARTITION p202106 VALUES LESS THAN (to_days('2021-06-01')), 
PARTITION p202108 VALUES LESS THAN (to_days('2021-08-01')), 
PARTITION p202110 VALUES LESS THAN (to_days('2021-10-01')), 
PARTITION p202112 VALUES LESS THAN (to_days('2021-12-01')), 
PARTITION p202202 VALUES LESS THAN (to_days('2022-02-01')), 
PARTITION p202204 VALUES LESS THAN (to_days('2022-04-01')), 
PARTITION p2022 VALUES LESS THAN (MAXVALUE) )
;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值