如何从包含6亿行的表中快速删除列?

时间:2014-05-02 14:37:41

标签: sql sql-server sql-server-2008

我有一个大表,我希望在其上运行此查询:

ALTER TABLE Employee
DROP COLUMN Zipcode

Zipcode数据类型为varchar

这种方法不适合,因为它需要很长时间并且增加了日志空间,并且持续数小时。任何人都可以指导我一种独特且更复杂的方法,它不会影响数据库的性能吗?

2 个答案:

答案 0 :(得分:2)

你真的测试过吗?删除列是即时的。你没有问题需要解决。

<小时/> 好的,所以看起来你有阻塞问题。你还没有跟进我对此的评论。你应该。

如果正在运行的事务正在使用您要更改的表,则alter必须等待。找出谁阻止访问该表。运行sp_who2并查看阻止列。

答案 1 :(得分:1)

说实话,我认为你没有任何选择:ALTER TABLE语句如删除一个列可能需要很长时间才能在非常大的表上进行,所以我认为你必须确定一个机会之窗,你可以得到一些体面的停机时间然后去做。您可以考虑将数据库日志模型从FULL更改为SIMPLEBULK LOGGED,以帮助减少日志写入和可能的一些时间,但这肯定需要一段时间。 #39;不要担心实时交易流量。