当前位置:  开发笔记 > 后端 > 正文

删除大表中所有数据的最快方法

如何解决《删除大表中所有数据的最快方法》经验,为你挑选了4个好方法。

我不得不从包含大约500万行的日志表中删除所有行.我最初的尝试是在查询分析器中发出以下命令:

从client_log中删除

花了很长时间.



1> Rob Walker..:

查看truncate table,它快得多.


关于TRUNCATE的注释,如果其中一列是IDENTITY列,则TRUNCATE会将该列的SEED重置为其初始值(定义表时指定的值).所以从某种意义上说,这就像从一张全新的桌子开始.我发现在重新填充表之前清理数据很有用
@Dillie-O:TRUNCATE可以回滚,它只是取消分配页面的方式不同 - http://blog.sqlauthority.com/2010/03/04/sql-server-rollback-truncate-command-in -交易/

2> Ron Skufca..:

我在msdn transact-SQL引用中发现了TRUNCATE TABLE.对于所有感兴趣的人都是这里的评论:

TRUNCATE TABLE在功能上与DELETE语句完全相同,没有WHERE子句:两者都删除表中的所有行.但是TRUNCATE TABLE比DELETE更快并且使用更少的系统和事务日志资源.

DELETE语句一次删除一行,并在事务日志中为每个已删除的行记录一个条目.TRUNCATE TABLE通过释放用于存储表数据的数据页来删除数据,并且只有页面解除分配记录在事务日志中.

TRUNCATE TABLE从表中删除所有行,但表结构及其列,约束,索引等仍然存在.标识用于新行的计数器将重置为列的种子.如果要保留身份计数器,请改用DELETE.如果要删除表定义及其数据,请使用DROP TABLE语句.

您不能在FOREIGN KEY约束引用的表上使用TRUNCATE TABLE; 相反,使用不带WHERE子句的DELETE语句.由于未记录TRUNCATE TABLE,因此无法激活触发器.

TRUNCATE TABLE不能用于参与索引视图的表.



3> squadette..:

TRUNCATE以某种方式跳过事务日志有一个共同的神话.

这是误解,在MSDN中明确提到.

在这里的几条评论中引用了这个神话.让我们一起根除它;)


正确.截断是"最小化记录操作",但仍然记录.

4> UnkwnTech..:

作为参考,TRUNCATE TABLE也适用于MySQL

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有