我知道这里面有很多变量,我不是在寻找确切的 min:sec 数量:) 我已经阅读了许多资源,这些资源表明 aTRUNCATE
使用的资源比 a 少得多DELETE
,因此性能会更快。但是没有提到数量级。由于 aTRUNCATE
是 DDL(数据定义语言)操作而不是 DML(数据操作语言)操作,并且只有系统表是事务的一部分,我假设它不会花费很长时间。
任何有经验的人都可以使用接近这种尺寸的桌子来做这件事,可以提供一些见解?我们谈论最多一分钟,最多一个小时,几天,几周?
我知道这里面有很多变量,我不是在寻找确切的 min:sec 数量:) 我已经阅读了许多资源,这些资源表明 aTRUNCATE
使用的资源比 a 少得多DELETE
,因此性能会更快。但是没有提到数量级。由于 aTRUNCATE
是 DDL(数据定义语言)操作而不是 DML(数据操作语言)操作,并且只有系统表是事务的一部分,我假设它不会花费很长时间。
任何有经验的人都可以使用接近这种尺寸的桌子来做这件事,可以提供一些见解?我们谈论最多一分钟,最多一个小时,几天,几周?
一毫秒左右。
截断是 O(1) - 一个纯元数据操作。
这是假设表上没有并发活动。
截断可能需要等到现有读取完成才能获取
Sch-M
(模式修改)锁。对于大型表,实际的释放是在后台线程(SQL Server 2000 SP3及更高版本)上异步完成的。
有关截断的其他一些神话,请参阅每天的 SQL Server DBA 神话:(19/30) TRUNCATE TABLE 未被Paul S. Randal 记录。