复制数据要保留到新表,然后重命名

时间:2014-05-28 09:19:43

标签: sql database sql-server-2008 database-performance

我有一个Windows 2008 Ent。运行SQL 2008 Ent的服务器。 SQL DB的大小约为100Gb。此数据库中的一个表占85Gb。在做了一些分析之后,这一个表从一个记录的事件中获得了这个大小,这个事件没有任何价值,所以我们同意我们可以从这个表中清除这个事件的所有实例。一旦所有事件都被删除,表格的大小应该只有1Gb左右。

有人向我建议一种更有效的方法,而不是尝试删除包含此事件id的行,以便可能在没有数据的情况下再次创建表。将我们要保留的数据复制到新表中(省略具有事件ID的任何行)。将原始表重命名为某个内容,然后将新表重命名为原始表名。

这种方法很有意义,我可以看到,这可能比原始表中一次删除100行更快。我可以就如何解决这个问题提出一些建议吗?

1 个答案:

答案 0 :(得分:1)

将所有内容复制到新表的查询如下:

SELECT * INTO dbo.NewTable FROM dbo.OldTable WHERE [event id] <> 6030

然后:

ALTER TABLE dbo.OldTable
  RENAME TO dbo.OldTable_History;

 ALTER TABLE dbo.NewTable 
  RENAME TO dbo.OldTable;

如果你想手动创建表,那么在那之后运行它:

INSERT INTO dbo.NewTable
SELECT * FROM dbo.OldTable WHERE [event id] <> 6030