Sql server 删除表中的所有行

Sql server 删除表中的所有行,sql-server,tsql,Sql Server,Tsql,正常情况下,我会从XXX中删除*但在这个非常慢的表上,它通常有大约500k到1m行(其中一行是varbinary(最大值),如果它匹配的话) 基本上,我想知道是否有一种快速的方法来创建包含所有内容的表,实际上删除并重新创建它会更快,然后通过delete sql语句删除内容 我不想重新创建该表的原因是它被大量使用,我认为删除/重新创建会破坏sql server收集的索引和统计数据 我也希望有一种方法可以做到这一点,因为有一种“聪明”的方法可以通过sys.sysindexes获得行数,所以我希望有一

正常情况下,我会从XXX中删除*但在这个非常慢的表上,它通常有大约500k到1m行(其中一行是varbinary(最大值),如果它匹配的话)

基本上,我想知道是否有一种快速的方法来创建包含所有内容的表,实际上删除并重新创建它会更快,然后通过delete sql语句删除内容

我不想重新创建该表的原因是它被大量使用,我认为删除/重新创建会破坏sql server收集的索引和统计数据


我也希望有一种方法可以做到这一点,因为有一种“聪明”的方法可以通过sys.sysindexes获得行数,所以我希望有一种同样聪明的方法来删除内容

截断表
比从XXX删除*更快<代码>删除速度较慢,因为它一次只能工作一行。有些情况下,truncate不起作用,您可以在上阅读。


我建议使用TRUNCATE TABLE,它比从xxx删除更快,占用的资源更少


下面是相关的

,正如其他人所说,
截断表
要快得多,但它确实有一些限制(取自):

不能对以下表使用TRUNCATE TABLE:

-由外键约束引用。(可以截断具有引用自身的外键的表。)
-参与索引视图。
-通过使用事务性复制或合并复制发布。

对于具有一个或多个这些特征的表,请改用DELETE语句


最大的缺点是,如果您试图清空的表有外键指向它,则truncate调用将失败。

您可以重命名有问题的表,创建具有相同架构的表,然后随意删除原始表

有关[
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

此方法有助于最大限度地减少应用程序停机时间。

这还具有不将删除的行添加到事务日志的效果。。这样,它既不能回滚,也不会浪费一堆磁盘空间MySQL链接被破坏。正确链接:,真棒的解释+1用于TruncateThis对于SQl Server无效?RENAME是SQL Server中名为sp_RENAME的存储过程(用法:sp_RENAME'oldtable'、'newtablename')…据我所知,像y这样创建表也是无效的,因为您无法将不存在的表与现有表进行比较?