我需要通过从多个表中删除超过两年的记录来清理非常臃肿的SQL数据库。这样做最有效的方法是什么?。
答案 0 :(得分:15)
您有什么方法可以确定记录的“旧”程度吗? (即,表中是否有一列表示行的年龄或可用于计算年龄的日期?)。如果是这样,它应该是一个简单的
DELETE FROM Table WHERE Age > 2
例如,如果您有一个名为DateTime
的{{1}}列,则可以执行此操作:
CreateDate
答案 1 :(得分:3)
除了亚当罗宾逊的好答案:执行此类操作时:
答案 2 :(得分:0)
我已经看到dba在几个不同的公司做这件事,它似乎总是使用以下格式:
这种方法的好处是此更新不会写入日志,因此它们不会被数以千计的删除条目所破坏。它也更快。
缺点是更新不会写入日志,因此您唯一的选择就是恢复备份。
你应该考虑把房屋保管到位。如果上述情况太可怕了,那么您也可以使用房屋管理来在一段时间内清理数据库。
在MSSQL中,您可以创建一个每天运行的作业,删除查询的前1000行。窃取亚当的查询 -
DELETE TOP 1000 FROM Table WHERE DATEADD(year,2,CreateDate)< GETDATE()
这将是非常安全的,并且会在三个月左右的时间内安全地删除您的数据,并且他们将来也会保持数据库的大小。
您的数据库将来会使用此空间,但如果您想恢复空间,则需要缩小数据库。如果您感兴趣,请四处阅读 - 是否值得,取决于要恢复的空间量与数据库的总大小。