如何高效地从DB2表中删除所有行

10

我有一张表,大概有50万行数据,我想删除所有的行。

如果我直接使用delete from tbl,事务日志就会被填满。但是我不关心这些事务,也不需要在任何情况下回滚操作。我可以分批次删除数据,但是是否有更好的方法呢?

如何高效地从DB2表中删除所有行? 我能否为此命令禁用事务,或者有特殊的命令来实现此操作(例如MySQL中的truncate 命令)?

在删除记录后,我将重新填充类似数量的新数据。

2个回答

17

请注意,截断仅适用于没有被外键引用的表。链接的文章展示了一种即使是这些表也可以清空的替代方法,即通过将dev null加载到其中来实现。调用ADMIN_CMD('LOAD FROM /dev/null of del REPLACE INTO someschema.sometable NONRECOVERABLE')。使用nonrecoverable可避免将表设置为备份挂起状态。 - airmil

8
为了在DB2中截断一张表,只需写下以下代码:

TRUNCATE TABLE 表名;

alter table schema.table_name activate not logged initially with empty table

根据我所读到的,这将删除表格内容而不进行任何日志记录,这将减轻服务器的I/O负担。


1
由于缺乏日志记录,这可能无法在复制/ HADR环境中运行。 - Juha Syrjälä
1
对于那些需要在没有TRUNCATE TABLE语句的DB2版本上清空表格的人来说,这是一个非常有用的答案。 - John Y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接