大数据量表结构修改

背景

数据库:mysql8

一般情况下修改表字段的sql大家都会写。最近测试环境的表有个需求需要扩充表字段,我扩充了半个多小时还没扩充完。
原因是表数据71万,占空间1.4G。数据量太大,更新字段类型还会锁表。

解决方案

  1. 创建新表结构
CREATE TABLE 新表名 LIKE 原表名;
ALTER TABLE 新表名 MODIFY COLUMN 字段名 新类型;
  1. 分批迁移数据
-- 假设有主键id,分批插入,或者时间条件等其他条件也可以
INSERT INTO 新表名 SELECT * FROM 原表名 WHERE id BETWEEN 1 AND 10000;
INSERT INTO 新表名 SELECT * FROM 原表名 WHERE id BETWEEN 10001 AND 20000;
-- 继续分批...
  1. 切换表名
RENAME TABLE 原表名 TO 原表名_old, 新表名 TO 原表名;

总结

用这些sql测试环境保留了近一年的数据
上面执行了半个多小时没解决的问题,这个方案几分钟就好了
基本不需要等待

但是这个方案仅限于测试环境解决问题,如果是生产环境,就要考虑整套归档方案。而不是简单的这样处理,

当然数据库停机之后,如果确保没有业务产生,也可以用这种方案把原表全量数据分批迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值