mysql 如何更好的给一个千万级数据量的表增加一个字段。

风一样的女子& 2015-07-22 10:49:04
表结果如下:
CREATE TABLE `test` (
`name` INT(20) NOT NULL,
`b` VARCHAR(50) DEFAULT NULL,
`c` INT(11) NOT NULL DEFAULT '0',
`d` INT(11) DEFAULT '0',
`e` VARCHAR(20) CHARACTER SET utf8 DEFAULT NULL,
`f` VARCHAR(100) CHARACTER SET utf8 DEFAULT '',
`g` TINYINT(4) DEFAULT '0',
`username` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`i` VARCHAR(8) DEFAULT 'unknown',
`j` TINYINT(4) DEFAULT '0',
PRIMARY KEY (`name`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4

数据量:1500万左右

目前我的做法是:
1、重新建一张新表tmp_test,把test表的数据copy到新表tmp_test里,然后给新表加上主键,唯一索引。
2、rename表名,切换业务。(将test改为test_bak,将tmp_test改为test)
3、由于原test表不停的有数据的insert 和update操作,所以把第一步执行过程中原test表insert和update变动的数据,更新到新test表。

大家来看看,还有没有什么更好的办法。
...全文
22484 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mygia 2019-01-27
  • 打赏
  • 举报
回复
服务器为4核8G的,处理期间 CPU维持在 40%上下,正常跑业务时候CPU在 10%上下。
mygia 2019-01-27
  • 打赏
  • 举报
回复
试过给3千多万条记录的表添加一个int 字段,这个表单个表大小就有10g多,直接在跑的业务上添加,总耗时不到10分钟,期间数据插入正常。
云霏阳 2015-12-11
  • 打赏
  • 举报
回复 1
1.可以直接加字段啊,是不是担心性能会影响当前业务。 2.1500万不算太多,可以在业务少的时候,例如晚上直接加字段。
chmuggmwtg 2015-07-28
  • 打赏
  • 举报
回复
建张副表行不?跟主表关联(关联ID TypeId Value)。对一些不是非常重要的字段,这样扩展性比较好。
  • 打赏
  • 举报
回复
难道现在大家都不上CSDN了,为什么不来人讨论讨论了。

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧