我想知道是否有人可以给我一个问题指针。我认为其他人之前已经经历过这种情况,并且想知道效率最高的是什么。
我的生产数据需要很长时间才能处理,主要是因为我们没有在ID字段上设置索引。
ID字段当前是nvarchar(max),因此无法编入索引。此ID永远不会超过30个字符,因此我希望将数据类型更改为nvarchar(30)。但是,我注意到使用了如下语句:
ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR ( 30 ) NOT NULL
已经为较小的表占用了大量时间。我担心它甚至可能不适用于较大的表,因为DiskIO对于较小的表已经非常高了。
以下是否会更快并且可以运作?
有没有人对什么可能更好有任何建议?
任何指针/帮助都将不胜感激!
答案 0 :(得分:2)
我们通过创建一个空的新列(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)