SqlServer通过TRUNCATE快速删除数据库表

2017/1/26 15:31:56 人评论 次浏览 分类:SQL


对于需要快速删除数据库的某个表的数据的时候,如果我们使用Delete 的操作删除数百万级以上的数据,一般速度都不理想,而且在执行Delete操作的过程如果发生中断的话就会进行自动的rollback回滚数据。因为在执行delete的操作的时候,数据库时候会将删除的操作记录在数据库日志中以实现回滚的机制。这种记录到数据库日志的行为将对硬盘进行大量的读写操作,执行的速度非常慢。

现在整理快速删除数据库表的方法:
使用truncate table tablename 的SQL语句,注意这里执行之后是无法回滚还原的。truncate 的操作是快速删除整个表的数据,不支持条件查询。所以如果遇到需要保留表中部分数据,那么可以先把这部分数据查出来之后存放到临时表,等待快速删表数据之后,再把数据插入会原来的表中。
例如:
SELECT * INTO #hold FROM OriginalTable WHERE UpdateDate > '2017-01-12' 
go
TRUNCATE TABLE OriginalTable
go
INSERT OriginalTable SELECT * FROM #hold 
go

说明:其中OriginalTable  表示原来的表名。这个过程是将符合条件的数据插入到#hold的临时表中,然后通过TRUNCATE 秒删表数据,删除成功之后将临时表#hold中的数据插入到原来的表中。

PS:另外附上如果大量删除数据之后,一般需要压缩一下数据的空间。
可以用下面的sql :


DBCC SHRINKDATABASE(DB_NAME)


相关资讯

  • MySQL服务无法启动出现错误1067,进程意外终止的解决方法

    在给系统打补丁之后就需要重启。第二天发现MySQL服务无法自启动,然后尝试手动重启也不行。提示“windows无法启动mysql服务,位于本地计算机上。错误1067:进程意外终止”。然后用“错误1067:进程意外终止”去百度,按照搜索结果前面操作方法试试,发现还是无法启动mysql服务…

    2016/6/24 18:47:08
  • mysql的innodb_force_recovery参数说明

    innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的恢复操作。当不能进行有效的恢复操作时,mysql有可能无法启动,并记录下错误日志。

    2016/5/28 15:26:38