www.BCZJ.com【编程之家】 >> 数据库 >> 删除巨多记录的方法

删除巨多记录的方法

www.BCZJ.com【编程之家】 www.bczj.com admin 2007-2-22 13:20:20

今天我遇到了一个特别的问题,就是erp系统运行的很慢,经过我分析,我认为是数据量过大导致的,经过分析,确实就是有个日志表的记录已经达到60万条了,每次进入系统的时候都要往这个表里面插入记录,所以我就决定清空这个表,使用了各种命令

删除所有记录:delete from log 这个不行,一会就过期了,记录一个都没少

后来就delete from log where date<'2003-12-1'这样可以了,我按照日期一个一个来还不行吗?但是还是不行,如果下个日期超过10天还是删不了,总是提示过期

然后没法子,就只好selete top 1000 * from log,好了,这下可以显示出来了,一个一个的删除吧,但是郁闷呀,1个下午也清不了60万条呀

最后终于找到了一个好法子

我使用:TRUNCATE TABLE log这个命令就可以搞定了

但是这个命令也有缺点,就是不把删除的每行进行日志记录,而且不能激发触发器,下面请看原话!TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

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

责任编辑: 参与评论
【编程之家】版权所有 www.bczj.com 沪ICP备06025676号 QQ:382611662
Powered By: 上海驰志网络 3.0 Beta