我有一个Windows 2008 Ent。运行SQL 2008 Ent的服务器。 SQL DB的大小约为100Gb。此数据库中的一个表占85Gb。在做了一些分析之后,这一个表从一个记录的事件中获得了这个大小,这个事件没有任何价值,所以我们同意我们可以从这个表中清除这个事件的所有实例。一旦所有事件都被删除,表格的大小应该只有1Gb左右。
有人向我建议一种更有效的方法,而不是尝试删除包含此事件id的行,以便可能在没有数据的情况下再次创建表。将我们要保留的数据复制到新表中(省略具有事件ID的任何行)。将原始表重命名为某个内容,然后将新表重命名为原始表名。
这种方法很有意义,我可以看到,这可能比原始表中一次删除100行更快。我可以就如何解决这个问题提出一些建议吗?
答案 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