我有一些表,我作为报告汇总的一部分构建.之后我根本不需要它们.有人提到截断它们会更快.
从表中删除记录会记录每次删除,并对删除的记录执行删除触发器.Truncate是一个更强大的命令,可以在不记录每一行的情况下清空表.SQL Server阻止您使用引用它的外键截断表,因为需要检查每行上的外键.
截断通常超快,非常适合清除临时表中的数据.它确实保留了表的结构以供将来使用.
如果您确实要删除表定义以及数据,只需删除表.
有关详细信息,请参阅此MSDN文章
DROP TABLE删除表.
TRUNCATE TABLE将其清空,但将其结构留给将来的数据.
DROP和TRUNC做了不同的事情:
TRUNCATE TABLE
从表中删除所有行而不记录单个行删除.TRUNCATE TABLE类似于没有WHERE子句的DELETE语句; 但是,TRUNCATE TABLE更快,并且使用更少的系统和事务日志资源.
DROP TABLE
删除一个或多个表定义以及这些表的所有数据,索引,触发器,约束和权限规范.
就速度而言,差异应该很小.无论如何,如果你根本不需要表结构,当然要使用DROP.
我认为你的意思是DELETE TABLE和TRUNCATE TABLE之间的区别.
DROP TABLE
从数据库中删除表.
删除表
没有条件删除所有行.如果有触发器和引用,那么这将处理每一行.如果存在索引,也将修改索引.
TRUNCATE TABLE
将行计数设置为零并且不记录每一行.它和其他两者都快得多.
这些答案都没有指出这两个操作的重要区别.删除表是可以回滚的操作. 但是,truncate无法回滚 ['TRUNCATE TABLE'也可以回滚].这样,如果有很多行,丢弃一个非常大的表可能会非常昂贵,因为它们都必须记录在临时空间中,以防您决定将其回滚.
通常,如果我想摆脱一个大表,我将截断它,然后删除它.这样,数据将被固定而没有记录,并且可以删除该表,并且该下降将非常便宜,因为不需要记录数据.
重要的是要指出截断只是删除数据,离开表,而drop实际上会删除数据和表本身.(假设外键不排除这样的行为)