MySQL分区表到普通表互转

由于最近总有人抱怨,数据迁移后执行SQL变慢,经过查看原来是分区导致的问题。原分区根据按月设置RANGE分区,


看到这图的时候也许有人就会发现问题.......

业务查询SQL:


从SQL上看 执行计划确实是走了分区,但为什么没有命中索引呢,在图1的里有联合索引(idx_reportDate_groupID_shopID_saasOrderKey)

##解决问题思路

1、若强制指定走索引,确实是快的,扫描的行数也扫了


但由于业务修改比较麻烦,被要求要和其他库统一索引,继续不管....找问题先......

解决问题2:

   猜测可能是表统计信息和碎片引起的,通过dump 还原操作,结果还是一样没解决问题......

解决问题3:

  SQL查询1号到10号跨的时间段比较长,难道是优化器问题.....理论了解不多....继续找问题

  先把SQL 简单化查询操作 如select * from ....操作


发现效果还不错,此时修改查询时间范围。按业务查询的SQL看看


发现问题了,按理应该是在P27分区,怎么扫了这么多分区,这就能和第1图定义的分区有关系了,定义分区出了问题,到这算真正找到问题了。

开始解决问题:

目前应该想着怎么对3000W 表重构分区,而且不能删除原来数据都要保留着

方法1:

对于小表执行ALTER 操作:alter table table_name remove partitioning;  ##移除分区,锁表

线上可以使用pt-osc工具来移除分区,不影响业务

pt-online-schema-change -u load_data -h 192.168.21.113 -p root123 -P 3306 --alter=" REMOVE PARTITIONING" D=test,t=tbl_saas_order_food --charset=utf8 --no-version-check  --statistics --critical-load="Threads_running:200" --max-load="Threads_running=25" --print --execute

发现一移除分区查询瞬间变快


图索引刚加,在没这个索引 也可使用令一索引

重构分区:

小表自行alter table tabe_name PARTITION BY range(sid)(PARTITION p1512 VALUES LESS THAN (20160101),

 PARTITION p1601 VALUES LESS THAN (20160201),.........,PARTITION p888666 VALUES LESS THAN MAXVALUE)

大表:PT-OSC,如图


重构分区后,执行计划


其他验证,是否指定分区:





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值