截断表在 252M 行(170GB 数据)上需要多长时间?

cri*_*vin 2 sql-server-2005 sql-server truncate

我知道这里面有很多变量,我不是在寻找精确的分钟数:秒 :) 我已经阅读了许多资源,这些资源声明 aTRUNCATE使用的资源比 a 少得多DELETE,因此执行速度更快。但是没有提到数量级。由于 aTRUNCATE是 DDL(数据定义语言)操作而不是 DML(数据操作语言)操作,并且只有系统表是事务的一部分,因此我认为它不会花费很长时间。

任何有经验的人都可以使用接近这种大小的桌子来做这件事,可以提供一些见解吗?我们最多谈一分钟,最多一个小时,几天,几周?

Tom*_*Tom 9

一毫秒左右。

截断是 O(1) - 纯元数据操作。

这是假设表上没有并发活动。

截断可能需要等到现有读取完成才能获取Sch-M(模式修改)锁。

对于大表,实际的释放是在后台线程(SQL Server 2000 SP3 以后)上异步完成的。

有关围绕 truncate 的其他一些误区,请参阅每天 SQL Server DBA 误区:(19/30) TRUNCATE TABLE is non-logged by Paul S. Randal。