SQL Query删除两年以上的记录

时间:2010-06-03 20:58:03

标签: sql

我需要通过从多个表中删除超过两年的记录来清理非常臃肿的SQL数据库。这样做最有效的方法是什么?。

3 个答案:

答案 0 :(得分:15)

您有什么方法可以确定记录的“旧”程度吗? (即,表中是否有一列表示行的年龄或可用于计算年龄的日期?)。如果是这样,它应该是一个简单的

DELETE FROM Table WHERE Age > 2

例如,如果您有一个名为DateTime的{​​{1}}列,则可以执行此操作:

CreateDate

答案 1 :(得分:3)

除了亚当罗宾逊的好答案:执行此类操作时:

  1. 首先使用DELETE的WHERE子句运行SELECT查询,以确保获得“正确的数据”
  2. 执行完整备份
  3. 在“关闭”时间内运行该物品,以免对用户造成太大影响

答案 2 :(得分:0)

我已经看到dba在几个不同的公司做这件事,它似乎总是使用以下格式:

  1. 备份表格
  2. 删除所有索引
  3. 选择要保留在临时表中的行
  4. 截断原始表格
  5. 从临时表中插入(到源表中)
  6. 重新创建索引
  7. 这种方法的好处是此更新不会写入日志,因此它们不会被数以千计的删除条目所破坏。它也更快。

    缺点是更新不会写入日志,因此您唯一的选择就是恢复备份。

    你应该考虑把房屋保管到位。如果上述情况太可怕了,那么您也可以使用房屋管理来在一段时间内清理数据库。

    在MSSQL中,您可以创建一个每天运行的作业,删除查询的前1000行。窃取亚当的查询 -

    DELETE TOP 1000 FROM Table WHERE DATEADD(year,2,CreateDate)< GETDATE()

    这将是非常安全的,并且会在三个月左右的时间内安全地删除您的数据,并且他们将来也会保持数据库的大小。

    您的数据库将来会使用此空间,但如果您想恢复空间,则需要缩小数据库。如果您感兴趣,请四处阅读 - 是否值得,取决于要恢复的空间量与数据库的总大小。