暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL千万级别大数据量的表添加新字段

这个码农有点帅 2021-06-21
6612

    我曾经在面试是中被问到:千万级数据量的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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论