加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:44:04 所属栏目:MsSql教程 来源:网络整理
导读:我在SQL Server 2008 R2中有一个表,接近十亿行.我想要将数据类型从int更改为bigint.两次ALTER TABLE zzz ALTER COLUMN yyy的作品,但它非常慢.我如何加快处理速度?我正在考虑将数据复制到另一个表,删除,创建,复制和切换到简单的恢复模式,或者以某种方式使用光
我在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.再次,我还没有测试这是否会改变更快或更慢,或者首先添加压缩需要多长时间.只要把它扔在那里

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读