sql – 在一个巨大的表格中更改列类型

前端之家收集整理的这篇文章主要介绍了sql – 在一个巨大的表格中更改列类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在sql Server 2008 R2中有一个表,接近十亿行.我想要将数据类型从int更改为bigint.两次ALTER TABLE zzz ALTER COLUMN yyy的作品,但它非常慢.我如何加快处理速度?我正在考虑将数据复制到另一个表,删除,创建,复制和切换到简单的恢复模式,或者以某种方式使用光标1000行一次,但我不知道这些是否会实际上导致任何改进.

解决方法

根据您所做的更改,有时候维护窗口更容易.在那个窗口中(没有人可以更改表中的数据),您可以:

>删除指向旧列的任何索引/约束,并禁用触发器
>使用新的数据类型添加一个新的可空列(即使它不是NULL)
>将新列设置更新为等于旧列的值(您可以在单个事务的块中执行此操作(例如,使用UPDATE TOP(10000)一次影响10000行)… SET newcol = oldcol WHERE newcol IS NULL )和CHECKPOINT以避免超出您的日志)
>一旦更新完成,请删除旧列
>重新命名新列(如果适用,添加一个NOT NULL约束)
>重建索引和更新统计信息

这里的关键是它允许您在步骤3中逐步执行更新,这在单个ALTER TABLE命令中无法执行.

这假设列在数据完整性方面不起主要作用 – 如果它涉及一系列外键关系,则还有更多的步骤.

编辑

此外,只是想大声的问候,我还没有做过任何测试(但将其添加到列表中).我不知道页面行压缩是否会在这里有所帮助?如果将INT更改为BIGINT,使用压缩就绪sql Server应该仍然将所有值视为仍然适合于INT.再次,我还没有测试这是否会改变更快或更慢,或者首先添加压缩需要多长时间.只要把它扔在那里

猜你在找的MsSQL相关文章