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

SQL Server,将NTEXT转换为NVARCHAR(MAX)

发布时间:2020-12-12 08:44:17 所属栏目:MsSql教程 来源:网络整理
导读:我有一个目前有NTEXT的大量字段的数据库. 升级到SQL 2005后,我们对NVARCHAR(MAX)进行了一些性能测试. 如果你阅读这篇文章: http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx 这解释了一个简单的ALTER COL
我有一个目前有NTEXT的大量字段的数据库.

升级到SQL 2005后,我们对NVARCHAR(MAX)进行了一些性能测试.

如果你阅读这篇文章:

http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx

这解释了一个简单的ALTER COLUMN不会将数据重新排列成行.

我用我的数据体验这个.如果我们只是运行ALTER COLUMN,我们其实在某些方面的性能要差得多.但是,如果我为所有这些字段运行UPDATE TABLE SET Column = Column,我们将获得非常大的性能提升.

我遇到的问题是数据库由数百个这样的列组成,数百万条记录.一个简单的测试(在一个低性能的虚拟机上)有一个包含700万条记录的单个NTEXT列的表需要5个小时更新.

有人可以提出任何建议,以便如何以更有效的方式更新数据,从而最大限度地减少停机时间和锁定时间?

编辑:我的备份解决方案是随着时间的推移更新块中的数据,但是,随着数据的增加,性能下降,直到所有的记录都被更新,这个时间越短越好,所以我仍然在寻找一个更快的更新方式.

解决方法

如果你不能得到预定的停机时间….

创建两个新列:
为nvarchar(最大)
processedflag INT DEFAULT 0

在processedflag上创建一个非聚簇索引

您可以使用UPDATE TOP(您想要按主键更新顶部).

在更新过程中,将processedflag设置为1,以便下次更新只会更新处理后的标志仍为0

更新后可以使用@@ rowcount查看是否可以退出循环.

我建议在每次更新查询后使用WAITFOR几秒钟,以使其他查询有机会获取表上的锁,而不是超载磁盘使用情况.

(编辑:李大同)

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

    推荐文章
      热点阅读