评论

与删除语句相比,截断表具有以下优点:

所使用的事务日志空间较少。

DELETE语句删除行的每一次并记录各线,在交易log.truncate表删除条目删除的数据将数据页用于存储表数据和记录页面的版本只在事务日志。


所用的锁通常较少。

当执行DELETE语句一行锁,表中的行锁delete.truncate表总是锁表和页,而不是锁定所有行。


该表不会毫无例外地留下任何页。

在执行DELETE语句后,表仍会包含空页。例如,至少一个lck_m_x表锁必须使用堆中释放空表。如果删除操作时不使用不使用表锁,许多空页将包含在表(堆)。为索引,删除操作会留下一些空的页面,即使页面通过后台清理过程中迅速释放。


截断表删除表中的所有行,但表结构及其列、约束、索引等保持不变。要删除表定义及其数据,请使用下拉表语句。

如果表包含标识符列,则将列的计数器重置为由列定义的列的值。如果未定义种子,则默认值为1。

限制

截断表不能用于下表:
由外键引用的表。
参与索引视图的表。

通过将事务与事务复制或合并而发布的表。

对于上面有一个或多个特性的表,使用删除语句。

截断表不能激活触发器,因为此操作不记录所有行删除。有关更多信息,请参见创建触发器(Transact-SQL)。