gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:12:45 25 4
gpt4 key购买 nike

我有一个数据库,其中有大量当前为 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 个小时才能更新。

任何人都可以提供有关如何以更有效的方式更新数据以最大限度地减少停机时间和锁定的建议吗?

编辑:我的备份解决方案是随着时间的推移以 block 的形式更新数据,但是,对于我们的数据,这会导致性能更差,直到所有记录都已更新,并且这个时间越短越好,所以我仍在寻找以获得更快的更新方式。

最佳答案

如果您无法安排停机时间......

创建两个新列:nvarchar(最大)processedflag INT 默认 0

在processedflag上创建非聚集索引

您可以使用 UPDATE TOP(您想要更新按主键排序的 top)。

只需在更新过程中将processedflag设置为1,这样下次更新只会更新processed flag仍为0的地方

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

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

关于SQL Server,将 NTEXT 转换为 NVARCHAR(MAX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com