当我浏览 DBA-Reactions 时,我几乎可以理解所有的 .gif,但是对于这个,我遇到了麻烦:
https://twitter.com/DBAReactions/status/613840893322338304
我的意思是截断显然不会像批量删除那样创建事务日志,但在某些情况下您非常确定可以简单地截断一个完整的表。除此之外还有其他顾虑吗?所以基本上我很想了解完全不同。
当我浏览 DBA-Reactions 时,我几乎可以理解所有的 .gif,但是对于这个,我遇到了麻烦:
https://twitter.com/DBAReactions/status/613840893322338304
我的意思是截断显然不会像批量删除那样创建事务日志,但在某些情况下您非常确定可以简单地截断一个完整的表。除此之外还有其他顾虑吗?所以基本上我很想了解完全不同。
在某些情况下,您不能使用 TRUNCATE TABLE 命令而必须改用 DELETE 命令。
MSDN上有很好的解释:
https://msdn.microsoft.com/en-gb/library/ms177570.aspx
另外,请参阅Stack Overflow 上的这个问题,其中对该主题进行了冗长的讨论。
正如您所说, truncate 不使用 DELETE 会使用的事务日志资源。TRUNCATE 在技术上不属于最少记录的操作,但记录非常有效,因为它只是释放与数据相关的页面和范围。TRUNCATE 没有错,它已记录,您可以回滚并且速度很快。
请记住 TRUNCATE 不会触发触发器,如果您需要触发触发器,那么您将需要在可能可管理的批次中使用 DELETE 以减少锁定等。