【问题标题】:Best/most efficient way to convert Nvarchar(max) to nvarchar (30)将 Nvarchar(max) 转换为 nvarchar 的最佳/最有效方法 (30)
【发布时间】:2018-06-08 07:42:48
【问题描述】:

我想知道是否有人可以给我一个关于这个问题的指针。我想其他人以前也经历过这种情况,并且想知道什么是最有效的。

我的生产数据需要很长时间才能处理,主要是因为我们没有在 ID 字段上设置索引。

ID 字段当前是一个 nvarchar(max),所以它不能被索引。此 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) 列的名称?

有没有人有什么更好的建议?

任何指针/帮助将不胜感激!

【问题讨论】:

标签: sql sql-server tsql type-conversion


【解决方案1】:

我们通过创建一个空的新列(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) 

【讨论】:

  • 谢谢,我会试试这个,然后回复你看看它是否有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 2021-05-30
  • 2022-01-19
  • 2012-10-18
相关资源
最近更新 更多