【问题标题】:How to improve performance of an ALTER TABLE? [dropping collation]如何提高 ALTER TABLE 的性能? [丢弃整理]
【发布时间】:2012-05-10 23:39:12
【问题描述】:

我有一个包含 75 万条记录的“巨大”表。我需要更改此表的某些列。我有以下陈述:

ALTER TABLE [MyTable] ALTER COLUMN [MyFirstField]  NTEXT          NULL
ALTER TABLE [MyTable] ALTER COLUMN [MySecondField] NVARCHAR (50)  NULL
  • MyFirstFieldNTEXT COLLATE SQL_Latin1_General_CP1_CI_AS NULL 更改
  • MySecondFieldNVARCHAR (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 更改

转换所有记录需要相当长的时间。有什么想法可以加快这个过程吗?

【问题讨论】:

  • 一个有 750k 记录的表远非巨大。
  • @TimSchmelter,我知道 :-) 这就是为什么我很惊讶需要这么长时间 :-)
  • 稍微偏离主题,但使用NVARCHAR(MAX) 而不是NTEXT,NTEXT 最终将从SQL-Server 中删除。 msdn.microsoft.com/en-us/library/ms187993.aspx
  • 会比较慢,但您可以创建新表,然后一次插入 X 条记录。再说一遍会更长,但你可以插入 100 并且至少有时间。

标签: sql sql-server performance tsql sql-server-2005


【解决方案1】:

你无法加快速度。

每一列的文本值都需要从选定的排序规则转换为默认排序规则。这需要时间。

【讨论】:

  • 没有办法防止锁和类似的东西吗?什么都不需要记录(我认为)。
  • @KeesC.Bakker - 这不是我在没有记录的情况下会做出的那种改变。
猜你喜欢
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2018-07-11
相关资源
最近更新 更多