删除表中的所有行

通常我会做一个delete * from XXX但在这个表非常缓慢,它通常有大约500k到1m行(其中一个是一个varbinary(MAX),如果mathers)。

基本上,我不知道是否有一个快速的方法来emty所有内容的表,其实际上更快地删除和重新创build它,然后通过删除sql语句删除内容

我不想重新创build表的原因是因为它的使用和删除/重新创build我认为将销毁由sql server收集的索引和统计信息

我也希望有办法做到这一点,因为有一个“聪明”的方式,通过sys.sysindexes行数,所以即时通讯希望有一个equaly聪明的方式来删除内容

Truncate tabledelete * from XXX要快。 Delete很慢,因为它一次只能运行一行。 有几种情况truncate不起作用,你可以在MSDN上阅读。

正如其他人所说, TRUNCATE TABLE更快,但它有一些限制(取自这里 ):

在以下表格上不能使用TRUNCATE TABLE:

– 由FOREIGN KEY约束引用。 (您可以截断具有引用自身的外键的表。)
– 参与索引视图。
– 通过使用事务复制或合并复制发布。

对于具有一个或多个这些特性的表,请改用DELETE语句。

最大的缺点是,如果你试图清空的表有外键指向它,那么truncate调用将失败。

您可以重命名有问题的表,使用相同的模式创build表,然后在闲暇时删除原始表。

查看[ RENAME TABLE ] [1]和[ CREATE TABLE ] [2]命令的MySQL 5.1参考手册。

 RENAME TABLE tbl TO tbl_old; CREATE TABLE tbl LIKE tbl_old; DROP TABLE tbl_old; -- at your leisure 

这种方法可以帮助减less应用程序停机时间

我会build议使用TRUNCATE TABLE,它比DELETE FROM xxx更快,使用的资源更less

这里是相关的MSDN文章

在MS Sql Server中截断表

在Mysql中截断表