【发布时间】:2018-06-18 09:53:07
【问题描述】:
问题是,在有许多 (>1000) 个 ID 的情况下,两者中哪一个性能更高,为什么?
1) 这个对每个id一个一个执行,只在最后一个之后提交:
UPDATE User u SET u.status='ACTIVE' WHERE u.id=1;
2) 或者:
UPDATE User u SET u.status='ACTIVE' WHERE u.id IN (1,2,3....)
【问题讨论】:
-
单次更新会比逐行更高效,但
in()只能取1000个值。要更新的 ID 从哪里来?如果您要根据数据库中的其他数据来决定更新哪个,那么直接相关的更新会更好。 -
更有效的方法是,将这些 id 转储到临时表中,然后使用存在更新。
-
它将由 Java 程序通过 Hibernate 执行,因此我必须确保它不会生成第一个变体,而是生成第二个变体以提高性能。 (很可能是 CriteriaUpdate)
-
@clementino 。 . .副手,我想不出我会期望第一种方法具有更好性能的场景。一般来说,最好在数据库中做数据库操作。
标签: sql oracle performance