我们有一个包含 7.7 亿行和更改的生产表。我们想要(/需要?)将 Primary ID 列从 int 更改为 bigint 以允许 future 增长(并避免 32 位整数空间耗尽时突然停止)
DEV 中的实验表明,这并不像更改列那么简单,因为我们需要删除索引然后重新创建它。到目前为止,DEV(比 PROD 稍微谦虚一点)的指数下降在 1 个半小时后还没有结束。此表 24/7 不间断运行,长时间离线是不可能的。
有其他人遇到过类似的情况吗?你是怎么完成的?
还有其他选择吗?
编辑:附加信息:
- 主键是聚集的。
最佳答案
您可以尝试分阶段的方法。
- 创建一个新的 bigint 列
- 创建插入触发器以使新条目与 2 列保持同步
- 执行更新以使用转换后的值填充 bigint 列中的所有空值
- 将表的主索引从旧的 id 列更改为新的
- 指出任何 FK 和查询以使用新列
- 将新列更改为您的身份列,并从 #2 中删除插入触发器
- 删除旧的 ID 列
您最终应该将痛苦分散到这 7 个步骤中,而不是一次性解决所有问题。
关于sql-server - 在Sql Server中将int主键转换为bigint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461205/