【问题标题】:How to efficiently remove all rows from a table in DB2如何有效地从 DB2 中的表中删除所有行
【发布时间】:2026-02-21 16:55:02
【问题描述】:

我有一个大约有一百万行的表,我想删除所有行。

如果我执行简单的delete from tbl,事务日志就会填满。我不关心这种情况下的交易,无论如何我都不想回滚。我可以删除许多事务中的行,但有更好的方法吗?

如何有效地从 DB2 中的表中删除所有行?我能否以某种方式禁用此命令的事务,或者是否有特殊命令可以执行此操作(如 MySQL 中的 truncate)?

删除行后,我将使用相似数量的新数据重新填充数据库。

【问题讨论】:

    标签: sql performance db2


    【解决方案1】:

    似乎在较新版本的 DB2 中遵循命令 works

    TRUNCATE TABLE someschema.sometable IMMEDIATE  
    

    【讨论】:

    • 请记住,trancate 只能用于未被外键引用的表。链接的文章显示了一种通过将 dev null 加载到它们中来清空这些表的替代方法 CALL ADMIN_CMD('LOAD FROM /dev/null of del REPLACE INTO someschema.sometable NONRECOVERABLE')。 nonrecoverable 用于避免将表设置为备份挂起
    【解决方案2】:

    要截断 DB2 中的表,只需编写:

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

    据我所知,这将删除表格内容,而无需进行任何类型的日志记录,这将在您的服务器的 I/O 上变得更加容易。

    【讨论】:

    • 由于缺少日志记录,这可能无法在复制/hadr 环境中工作。
    • 对于那些需要在没有 TRUNCATE TABLE 语句的 DB2 版本上清除表的人来说,这是一个非常有用的答案。
    最近更新 更多