最佳/最有效的方式为nvarchar(最大)转换到为nvarchar(30)
我想知道如果任何人都可以给我这个问题的指针。我假设其他人以前经历过这种情况,并且想知道什么是最有效的。最佳/最有效的方式为nvarchar(最大)转换到为nvarchar(30)
我有一个正在相当长的处理,主要是因为我们还没有设置一个ID字段索引生产数据。
ID字段是目前为nvarchar(最大),所以它不能被索引。此ID不超过30个字符,因此我想将数据类型更改为nvarchar(30)。但是,我注意到使用诸如以下语句:
ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR (30) NOT NULL
已经为较小的表占用大量时间。我担心它可能不适用于较大的表格,因为DiskIO对于较小的表格已经非常高。
请问以下是更快,可能它的工作?
- 使用nvarchar(30)数据类型创建一个新列。
- 然后将数据从nvarchar(max)列复制到nvarchar(30)列。
- 然后删除nvarchar(max)列。
- 然后将nvarchar(30)列重命名为nvarchar(max)列的名称?
有没有人有任何建议,什么可能是更好?
任何指针/帮助将不胜感激!
回答:
我们通过创建一个空的新列(NULL)和批量更新解决了类似的问题
update top (5000) myTable --parentheses are mandatory, set a small number to avoid transaction log issues set newCol = oldCol -- or left(oldCol,30) not sure your data
where newCol is null
go 10000 --runs 10,000 times, set accordingly to your rows amount, this covers 50 million rows(5,000x10,000)
以上是 最佳/最有效的方式为nvarchar(最大)转换到为nvarchar(30) 的全部内容, 来源链接: utcz.com/qa/266504.html