Bri*_*n G 76 sql sql-server sybase
我有一些表,我作为报告汇总的一部分构建.之后我根本不需要它们.有人提到截断它们会更快.
dar*_*mon 25
DROP和TRUNC做了不同的事情:
TRUNCATE TABLE
从表中删除所有行而不记录单个行删除.TRUNCATE TABLE类似于没有WHERE子句的DELETE语句; 但是,TRUNCATE TABLE更快,并且使用更少的系统和事务日志资源.
DROP TABLE
删除一个或多个表定义以及这些表的所有数据,索引,触发器,约束和权限规范.
就速度而言,差异应该很小.无论如何,如果你根本不需要表结构,当然要使用DROP.
Hor*_*ux7 20
我认为你的意思是DELETE TABLE和TRUNCATE TABLE之间的区别.
DROP TABLE
从数据库中删除表.
删除表
没有条件删除所有行.如果有触发器和引用,那么这将处理每一行.如果存在索引,也将修改索引.
TRUNCATE TABLE
将行计数设置为零并且不记录每一行.它和其他两者都快得多.
Nat*_*ger 11
这些答案都没有指出这两个操作的重要区别.删除表是可以回滚的操作. 但是,truncate无法回滚 ['TRUNCATE TABLE'也可以回滚].这样,如果有很多行,丢弃一个非常大的表可能会非常昂贵,因为它们都必须记录在临时空间中,以防您决定将其回滚.
通常,如果我想摆脱一个大表,我将截断它,然后删除它.这样,数据将被固定而没有记录,并且可以删除该表,并且该下降将非常便宜,因为不需要记录数据.
重要的是要指出截断只是删除数据,离开表,而drop实际上会删除数据和表本身.(假设外键不排除这样的行为)
小智 6
DROP TABLE [table_name];
Run Code Online (Sandbox Code Playgroud)
DROP 命令用于从数据库中删除表。它是一个 DDL 命令。表的所有行、索引和权限也将被删除。DROP 操作无法回滚。
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
Run Code Online (Sandbox Code Playgroud)
DELETE 命令是 DML 命令。它可用于根据 WHERE 子句中指定的条件从表中删除所有行或某些行。它使用行锁执行,表中的每一行都被锁定以进行删除。它维护事务日志,所以它比 TRUNCATE 慢。DELETE 操作可以回滚。
TRUNCATE TABLE [table_name];
Run Code Online (Sandbox Code Playgroud)
TRUNCATE 命令从表中删除所有行。它不会记录每一行的删除,而是记录表数据页的释放,这使得它比 DELETE 更快。它使用表锁执行,整个表被锁定以删除所有记录。它是一个 DDL 命令。TRUNCATE 操作无法回滚。