Oracle UPDATE语句性能

时间:2018-06-18 09:53:08

标签: sql oracle performance

问题是,在许多(> 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....)

2 个答案:

答案 0 :(得分:4)

答案是第二种情况应该胜过第一种情况。具体取决于您运行这些更新语句的方式。如果您打算从客户端运行它们,例如一个Java程序,然后你的第一个方法将导致大的延迟惩罚,因为你不断为每个更新打开新的数据库连接。如果只是直接在Oracle上运行单独的更新,如果第二种情况下的id列表相当小,则可能没有太大的性能差异。

答案 1 :(得分:-1)

这两个语句之间没有区别,优化器会将每个ID的IN转换为=。 但您可以随时通过执行计划进行检查。 Generating and Displaying Execution Plans