我不得不从包含大约500万行的日志表中删除所有行.我最初的尝试是在查询分析器中发出以下命令:
从client_log中删除
花了很长时间.
查看truncate table,它快得多.
我在msdn transact-SQL引用中发现了TRUNCATE TABLE.对于所有感兴趣的人都是这里的评论:
TRUNCATE TABLE在功能上与DELETE语句完全相同,没有WHERE子句:两者都删除表中的所有行.但是TRUNCATE TABLE比DELETE更快并且使用更少的系统和事务日志资源.
DELETE语句一次删除一行,并在事务日志中为每个已删除的行记录一个条目.TRUNCATE TABLE通过释放用于存储表数据的数据页来删除数据,并且只有页面解除分配记录在事务日志中.
TRUNCATE TABLE从表中删除所有行,但表结构及其列,约束,索引等仍然存在.标识用于新行的计数器将重置为列的种子.如果要保留身份计数器,请改用DELETE.如果要删除表定义及其数据,请使用DROP TABLE语句.
您不能在FOREIGN KEY约束引用的表上使用TRUNCATE TABLE; 相反,使用不带WHERE子句的DELETE语句.由于未记录TRUNCATE TABLE,因此无法激活触发器.
TRUNCATE TABLE不能用于参与索引视图的表.
TRUNCATE以某种方式跳过事务日志有一个共同的神话.
这是误解,在MSDN中明确提到.
在这里的几条评论中引用了这个神话.让我们一起根除它;)
作为参考,TRUNCATE TABLE也适用于MySQL