我应该在I DROP TABLE之前TRUNCATE TABLE以避免记录开销吗?

时间:2011-07-05 19:36:07

标签: sql sql-server sql-server-2008

据我所知,使用TRUNCATE是一个记录最少的操作,并且在DROP记录删除操作时不会记录每条记录的删除。

所以,假设如果我想摆脱一个相对较大的表并且我希望这个以快速的方式发生并且尽可能小的记录开销我应该{I} {{1} }}?在TRUNCATE TABLE中这样做会有什么不同吗?

我应该注意到这需要以自动方式(在预先编写的脚本中)发生,因为这将部署到客户端数据库,其中停机时间和日志文件增长都可能成为问题。

2 个答案:

答案 0 :(得分:10)

虽然TRUNCATE不记录单个行,但它会记录页面/范围。这就是你可以回滚截断的原因(很多人都不知道)。我的猜测是,如果你只是截断然后下降它实际上会慢于它自己的下降。如果您介入之间,可能没有,但它还取决于日志活动,恢复模型,当您点击检查点等等。

为什么速度在这里很重要?如果您要放弃它,用户不会使用该表...

你为什么不测试它?除非有人对此进行了广泛的研究,涵盖了几个不同的变量,否则我怀疑你会得到比准教育猜测更多的东西。

答案 1 :(得分:2)

根据我的经验,truncate比drop更快,特​​别是对于大型数据集。