【发布时间】:2009-10-07 14:15:05
【问题描述】:
我正在尝试缩小一些数据库,以便我的开发人员可以将它们加载到他们的本地计算机上。我已经确定了几个包含历史数据(价值 10 年以上)的表,如果我删除超过 X 天的记录,它们将显着减少整体数据库大小(50% 或更多)。
我正在使用的删除语句如下所示,但我的问题是,如何提高此删除语句的速度?数据库已经采用简单的日志记录格式,但日志仍然随着删除语句而增长。有更好的记录方法吗?
这样做会更好吗:
- 将我要保留的数据从当前表复制到临时表中,
- 截断主表,
- 将临时数据移回主数据,
- 收缩日志,
- 在完成所有需要收缩的表后收缩数据库。
查询示例:
DELETE FROM LoginAttempts WHERE DateAttempt <= GETDATE() - 30
【问题讨论】:
-
我会指出,如果您的开发人员使用的数据库比生产环境小得多,那么您最终将难以让他们编写在他们的机器上可以在可接受的时间范围内工作但超时的代码产品在 dev 中使用小数据集是个坏主意。他们为什么不连接到开发服务器上的数据库。我们不会将大型数据库加载到每个人的个人计算机上!
标签: sql logging truncate sql-delete