【发布时间】: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) 列的名称?
有没有人有什么更好的建议?
任何指针/帮助将不胜感激!
【问题讨论】:
-
我建议将数据复制到另一个位置,截断表格,更改数据类型,然后重新插入数据。最后一部分,您需要使用最低级别的日志记录或使用
bulk insert。
标签: sql sql-server tsql type-conversion