alter table add column语句执行慢

本文介绍了一种在不中断服务的情况下,通过创建备份表、分批导入数据来修改已有表结构的方法,有效解决了直接修改导致服务阻塞的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始因为执行alter table bb add COLUMN expireTime datetime null;时间特别慢,网上有说是去掉default null,但是去掉之后还是慢(数据有41万条数据,后来经查时那台机器问题),没办法,只能先做备份,再导数据,以下方法:
select count(*) from bb;
create table bb_bak as select * from bb;
select count(*) from bb_bak;
TRUNCATE table bb;
alter table bb add COLUMN expireTime datetime null;
insert into bb(id,version,repeatCount,channel_id,FLEXICACHE_ID) select b.id,b.version,b.repeatCount,b.channel_id,b.FLEXICACHE_ID from bb_bak b limit 0,100000;
insert into bb(id,version,repeatCount,channel_id,FLEXICACHE_ID) select b.id,b.version,b.repeatCount,b.channel_id,b.FLEXICACHE_ID from bb_bak b limit 100000,200000;
insert IGNORE into bb(id,version,repeatCount,channel_id,FLEXICACHE_ID) select b.id,b.version,b.repeatCount,b.channel_id,b.FLEXICACHE_ID from bb_bak b limit 200000,250000;
select count(*) from bb;
TRUNCATE table bb_bak;
DROP table bb_bak;

注意上的limit是从0游标开始取100000个,不是到100000,ignore可以忽略重复key的异常,第三个insert会有重复值,这里用了ignore,则不会有问题了,select为了确保数据准确,truncate快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值