我有一些表格,是作为报告总结的一部分进行构建的。在那之后我都不需要它们了。有人建议将它们截断,因为这样会更快。
Translated:我在报告汇总中构建了一些表格,但之后就不再需要它们了。有人建议将其截断以提高速度。
我有一些表格,是作为报告总结的一部分进行构建的。在那之后我都不需要它们了。有人建议将它们截断,因为这样会更快。
Translated:我在报告汇总中构建了一些表格,但之后就不再需要它们了。有人建议将其截断以提高速度。
从表中删除记录会记录每个删除并执行已删除记录的删除触发器。Truncate是一条更强大的命令,无需记录每行即可清空表。由于需要检查每行的外键,SQL Server防止您截断引用它的外键的表。
Truncate通常非常快速,非常适合从临时表中清除数据。它保留表的结构以备将来使用。
如果您实际上想要删除表定义以及数据,请直接删除表。
有关更多信息,请参见此MSDN文章。
DROP TABLE删除表。
TRUNCATE TABLE清空表数据,但保留其结构以便于将来添加数据。
DROP 和 TRUNCATE 有不同的作用:
TRUNCATE TABLE
删除表中的所有行,而不记录单个行的删除操作。TRUNCATE TABLE 类似于没有 WHERE 子句的 DELETE 语句;但是,TRUNCATE TABLE 更快,并且使用更少的系统和事务日志资源。
DROP TABLE
删除一个或多个表定义及这些表的所有数据、索引、触发器、约束和权限规范。
就速度而言,差别应该很小。无论如何,如果您根本不需要表结构,请使用 DROP。
我想你是指DELETE TABLE和TRUNCATE TABLE之间的区别。
DROP TABLE
从数据库中删除表。
DELETE TABLE
如果没有条件,将删除所有行。如果存在触发器和引用,则会为每一行进行处理。还会修改索引(如果有)。
TRUNCATE TABLE
将行计数设置为零,并且不记录每一行。它比另外两个都要快得多。
没有这些答案指出这两个操作的一个重要区别。删除表(Drop table)是一种可以回滚的操作。如果有许多行,那么放弃对大型表进行删除的决定将非常昂贵,因为所有这些行都必须在临时空间中记录以便您决定回滚。
通常,如果我想摆脱一个大表,我会先截断它,然后再删除它。这样数据将被删除而不留下记录,并且可以很容易地删除该表,因为不需要记录任何数据。
但值得指出的是,截断只会删除数据,而保留表本身,而删除则确实会同时删除数据和表本身(假设外键不会阻止这样的操作)。
DROP TABLE [table_name];
DROP 命令用于从数据库中删除表。它是一个 DDL 命令。表中的所有行、索引和权限也将被删除。 DROP 操作无法回滚。
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
DELETE命令是DML命令之一。它可以根据WHERE子句中指定的条件,删除表中的所有行或某些行。它使用行锁执行,表中的每一行都被锁定以进行删除操作。它会维护事务日志,因此比TRUNCATE命令慢。 DELETE操作可以回滚。
TRUNCATE TABLE [table_name];
TRUNCATE TABLE会保留所有旧的索引和其他内容。而DROP TABLE则会删除该表,需要稍后重新创建。
删除 TableA 而不是截断 TableA? 一个常见的误解是它们做的事情是一样的。实际上,两者之间有很多区别。
DELETE 是基于每行记录的已记录操作。这意味着每个行的删除都会被记录并物理删除。
您可以删除任何不违反约束条件的行,同时保留外键或任何其他约束条件。
TRUNCATE 也是一个已记录操作,但以不同的方式。TRUNCATE 记录数据存在的数据页的取消分配。数据页的取消分配意味着您的数据行仍然实际存在于数据页中,但范围已标记为空以供重用。这就是 TRUNCATE 比 DELETE 更快的原因。
您不能截断具有任何外键约束的表。您将需要删除约束,截断表,然后重新应用约束。
TRUNCATE 将重置任何标识列为默认种子值。
Drop会完全删除表格,包括定义。Truncate会清空表格,但不会删除定义。
清空表格可以使表格变为空。删除表格则是完全删除了它。两种方法都很快,但是删除表格可能会更快(这取决于您的数据库引擎)。
如果您不再需要它,请删除它,以免它混乱您的模式。