那我们大表该如何修改表结构呢?网络搜索了一圈,基本都围绕了两种方法进行:第一种是在用户访问量少的时间段,进行表结构修改。第二种是采用copy替换原表的方法。
其实相对上述两种方式,还有一种方法可以从业务上面处理,就是在设计表结构的时候,根据现有业务和未来规划的业务,提前预留足够多的字段,后面表数据量大了,也不需要进行修改。但是这种方式需要对业务规划非常清楚,而且也没办法100 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 %解决大表修改字段问题,只能说缓解。
三、原表直接修改
对于用户访问量少的时间段进行表结构修改或者类似12306这种,凌晨11点-6点进行数据维护,直接停服修改表结构。原表直接修改,最大好处就是:简单方便,不需要考虑其它的问题,直接执行DDL命令即可。
ALTER TABLE
但是如果业务迭代比较快,或者改动表结构比较频繁的,系统又不允许停服(大多数系统都不允许停服),这个时候修改表结构就很痛苦了,一方面是开发人员需要经常性加班,而是如果改动是核心表,系统大部分模块都有关联到这个模块的时候,很容易改出问题,导致数据库死锁或者干脆宕机的风险。
大表虽然修改表结构会产生很多问题,但是大表本身是可以做优化的,最明显的优化就是去除不必要的索引或者将多个单个索引合并成一个索引,减少大表索引数据量大小,进而减少修改表索引的时间。
四、copy替换原表
copy替换原表方式,虽