代码之家  ›  专栏  ›  技术社区  ›  Rory

如何从大表(SQL Server)中快速删除大量数据

  •  5
  • Rory  · 技术社区  · 16 年前

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

    4 回复  |  直到 11 年前
        1
  •  8
  •   Preet Sangha    16 年前

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

    如果您有标识列,那么在租用数据之后,可以使用类似这样的方法重新设置表。

    declare @seed int
    select @seed = max(identity_col)+1 from tableName
    DBCC CHECKIDENT (orders, table_name, @seed)
    
        2
  •  2
  •   Mitch Wheat    16 年前

    考虑到要删除90%的行,在要保留到新表中的10%行中选择可能是最快的。

        3
  •  1
  •   TomTom    16 年前

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

    …删除索引是您在编程方面唯一可以做的事情。在这种情况下,删除索引并重新创建它们可能会有所帮助。

    …或者得到一个更快的磁盘子系统,主要用于数据。

    恢复模式没有帮助-恢复模式表示日志在(can bbe隐式)提交之后立即可删除,但其中没有任何内容可以避免写入日志条目。

        4
  •  1
  •   marc_s MisterSmith    16 年前

    添加一个 IsDeleted (BIT) 标记,为90%设置为1,并在表上创建一个视图,该视图仅显示 IsDeleted=0 .

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

    推荐文章