我曾经在面试是中被问到:千万级数据量的MySQL数据库表,如何添加新字段?我又不是DBA出身,一下子就被问蒙了。今天我们就一起来了解一下,这种场景下,如何添加字段比较合适。
添加字段的语句如下:
alter table t_order add column isVlid int default 0;
在测试数据量少的时候一般没什么问题,但如果数据量达到千万级,那很容易就因为执行时间过长而超时,到时增加失败。因为执行时间过长,锁表的时间过长,也会影响到业务的正常进行。
MySQL5.xx版本之前都有类似的问题,凡事大数据表 添加字段都会很慢,一旦执行添加字段操作 严重的会拖垮整个数据库服务器;而MySQL8.0.xx之后的版本引入了新的算法,基本上执行加字段操作很快,几乎是毫秒级的操作。
方案一:
将现有MySQL版本5.xx升级到8.0.xx之后的版本后,在执行新增字段语句。
方案二:
a、新建老表t_order的备份表t_order_bak,同时加一个字段:isVlid 并给默认值
b、迁移老表t_order数据到备份表t_order_bak中
c、删除老表t_order
d、新命名备份表t_order_bak表名为t_order
两个方案的优缺点:
方案一:
优势:不影响业务层的应用程序代码,也不会导致数据丢失
劣势:升级过程,必然要脱机,此过程时间过程一样会影响业务的正常运行
方案二:
优势:不用再调整业务层的应用程序代码,只需要DBA迁移表即可
劣势:新表可能会跟老表数据不一致,数据不完整;脱机操作过长可能会影响其他业务的正常运行。
除了以上两种方案,你还有其他方案吗?欢迎拿出你的实践案例一起聊聊
文章转载自这个码农有点帅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




