在 PostgreSql 中批量更新或删除哪个更有效?
In PostgreSql which is more efficient bulk Update or delete?
在我的 java 网络应用程序中,我需要从 table 中删除一组记录。我有 2 个选择:
- 直接运行从应用程序中删除查询
- 更新所有记录中的值以从用户视图中隐藏它们并让守护线程运行在后台清理这些记录。
记录的数量可以在 10 到 100000 之间。
我在这里的目的是了解在不给服务器增加太多负载的情况下高效和安全的方法。
P.S.: 欢迎分享任何其他 suitable 方法。
在幕后,UPDATE
实际上是:
- 将更新的行标记为已删除
- 插入新行,它是上面 1. 中行的副本,但反映更新的列
因此,由于 UPDATE
操作涉及两次写入,DELETE
实际上更有效,因为它只是标记已删除的行,使用一次写入(由于多版本并发控制(MVCC) 框架)
披露:我为 EnterpriseDB (EDB)
工作
如果您以后需要这些记录,您可以将这些记录移动到另一个table。
这种方法的优点是:-
- 您没有超载当前 table,因此此 table 的所有操作都会很快。
- 你以后可以用到这些记录。
更新
由于您不需要记录并且更新比删除更昂贵,因此您应该分批发出删除调用,比如 500 到 5000 条记录。
与删除命令相比,更新命令需要更多时间。在更新中,您实际上是在复制数据,而旧版本的数据只是隐藏在视图之外。
在我的 java 网络应用程序中,我需要从 table 中删除一组记录。我有 2 个选择:
- 直接运行从应用程序中删除查询
- 更新所有记录中的值以从用户视图中隐藏它们并让守护线程运行在后台清理这些记录。
记录的数量可以在 10 到 100000 之间。 我在这里的目的是了解在不给服务器增加太多负载的情况下高效和安全的方法。
P.S.: 欢迎分享任何其他 suitable 方法。
在幕后,UPDATE
实际上是:
- 将更新的行标记为已删除
- 插入新行,它是上面 1. 中行的副本,但反映更新的列
因此,由于 UPDATE
操作涉及两次写入,DELETE
实际上更有效,因为它只是标记已删除的行,使用一次写入(由于多版本并发控制(MVCC) 框架)
披露:我为 EnterpriseDB (EDB)
工作如果您以后需要这些记录,您可以将这些记录移动到另一个table。
这种方法的优点是:-
- 您没有超载当前 table,因此此 table 的所有操作都会很快。
- 你以后可以用到这些记录。
更新
由于您不需要记录并且更新比删除更昂贵,因此您应该分批发出删除调用,比如 500 到 5000 条记录。
与删除命令相比,更新命令需要更多时间。在更新中,您实际上是在复制数据,而旧版本的数据只是隐藏在视图之外。