如何从大表(sql server)快速删除大量数据

时间:2010-10-21 11:09:11

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

我想从百万+行表中删除大约90%的行。我可以做些什么来加快速度?例如如果我打开简单恢复模式会有帮助吗?

4 个答案:

答案 0 :(得分:8)

使用select into将您不想删除的行复制到临时表中,然后使用truncate表而不是删除。将行复制回旧表。请先记得drop contraints

如果您有标识列,则在重新输入数据后,请使用类似的内容重新设置表格。

declare @seed int
select @seed = max(identity_col)+1 from tableName
DBCC CHECKIDENT (orders, table_name, @seed)

答案 1 :(得分:2)

鉴于您要删除90%的行,SELECT INTO要保留在新表中的10%行可能是最快的。

答案 2 :(得分:1)

如果您无法将其余表复制到另一个表,则截断并复制回来......

...丢弃索引是你唯一可以编程的东西。在这种情况下,删除索引并重新创建它们可能有所帮助。

...或获得更快的光盘子系统,主要用于数据。

恢复模式无济于事 - 恢复模式表示日志可以在(可以隐式)提交后立即删除,但其中没有任何内容可以避免日志条目被写入。

答案 3 :(得分:1)

添加IsDeleted (BIT)标记,为那些90%设置为1,并在表格上创建一个仅显示IsDeleted=0行的视图。

删除总是a)资源密集型操作,b)破坏任何可能的责任 - 我会尽可能地避免它,原因包括两个(性能和数据破坏)。改为使用“软删除”方法。