问题是,在许多(> 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....)
答案 0 :(得分:4)
答案是第二种情况应该胜过第一种情况。具体取决于您运行这些更新语句的方式。如果您打算从客户端运行它们,例如一个Java程序,然后你的第一个方法将导致大的延迟惩罚,因为你不断为每个更新打开新的数据库连接。如果只是直接在Oracle上运行单独的更新,如果第二种情况下的id列表相当小,则可能没有太大的性能差异。
答案 1 :(得分:-1)
这两个语句之间没有区别,优化器会将每个ID的IN
转换为=
。
但您可以随时通过执行计划进行检查。
Generating and Displaying Execution Plans