删除表中的所有行
通常我会做一个delete * from XXX
但在这个表非常缓慢,它通常有大约500k到1m行(其中一个是一个varbinary(MAX),如果mathers)。
基本上,我不知道是否有一个快速的方法来emty所有内容的表,其实际上更快地删除和重新创build它,然后通过删除sql语句删除内容
我不想重新创build表的原因是因为它的使用和删除/重新创build我认为将销毁由sql server收集的索引和统计信息
我也希望有办法做到这一点,因为有一个“聪明”的方式,通过sys.sysindexes行数,所以即时通讯希望有一个equaly聪明的方式来删除内容
Truncate table
比delete * 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中截断表