You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2016:10亿行表INT改BIGINT,哪种方案更优?

直接使用ALTER COLUMN即可,无需新建表迁移

既然你们对停机时间没有顾虑,针对SQL Server 2016中拥有10亿行数据的表,将INT列修改为BIGINT列,直接执行ALTER TABLE [目标表名] ALTER COLUMN [目标列名] BIGINT [NOT NULL/NULL];(根据列的可空性调整后缀)完全有效,没必要采用新建表再迁移数据的方案。

需要注意的几个细节:

  • 操作期间表会被排他锁锁定,所有读写操作都会被阻塞,直到修改完成,这也是需要确认对停机时间无顾虑的核心原因。
  • 该修改不属于轻量元数据变更:由于INT(4字节)和BIGINT(8字节)存储长度不同,SQL Server需要逐行更新数据,操作耗时直接和表行数、存储IO速度相关,10亿行的场景可能需要数小时甚至更久,要提前预留足够操作窗口。
  • 确保磁盘空间充足:修改过程中SQL Server会生成临时数据,所需额外空间大致相当于原表数据量的一倍(具体取决于表结构和索引情况),避免因空间不足导致操作失败。
  • 操作前务必完成全量备份,防止中途故障引发数据损坏。

如果后续有停机时间限制的场景,再考虑新建表+数据迁移+切换的方案,但当前场景下ALTER COLUMN是更直接高效的选择。

内容的提问来源于stack exchange,提问作者SnakesNoLadders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:22:02