2011-06-17 69 views
1

我想在Oracle中进行查询或某些功能,可以更新~24000行。例如1更新查询如下所示:Oracle更新,make〜24000更改

update numbers 
set status = 1 and some_id = 123123 
where number_id = 1231; 

“some_id”和“number_id”在每个查询中都不相同。

问题是这样一个接一个地花费太多时间,我需要更快的解决方案。

+0

SOME_ID和状态都从那里取价值? – 2011-06-17 10:43:16

回答

3

把不同的值到一个表,然后使用在查询:

update numbers n 
set status=1, 
    some_id = (select some_id from newtable t where t.number_id = n.number_id) 
where number_id in (select number_id from newtable); 
0

写PL-SQL存储过程并传递参数。调用一次并完成。

或使用PreparedStatement并批量处理您的请求。

它们可能需要很长的时间,因为您每次都要往返。批量将帮助很多,因为你只会做一次往返。

1

看起来好像您在查询中硬连接谓词和更新值。通过使用绑定变量,您可能可以提高性能。对于绑定变量,Oracle对于所有24k个相同的SQL UPDATE语句只需要一个硬解析,而不是对24k个不同的SQL UPDATE语句进行24k硬解析(并更新执行计划)。

与Java:

update numbers 
set status = ?, some_id = ? 
where number_id = ?; 

与其他工具:

update numbers 
set status = :1, some_id = :2 
where number_id = :3;