我想在Oracle中进行查询或某些功能,可以更新~24000行。例如1更新查询如下所示:Oracle更新,make〜24000更改
update numbers
set status = 1 and some_id = 123123
where number_id = 1231;
“some_id”和“number_id”在每个查询中都不相同。
问题是这样一个接一个地花费太多时间,我需要更快的解决方案。
我想在Oracle中进行查询或某些功能,可以更新~24000行。例如1更新查询如下所示:Oracle更新,make〜24000更改
update numbers
set status = 1 and some_id = 123123
where number_id = 1231;
“some_id”和“number_id”在每个查询中都不相同。
问题是这样一个接一个地花费太多时间,我需要更快的解决方案。
把不同的值到一个表,然后使用在查询:
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);
写PL-SQL存储过程并传递参数。调用一次并完成。
或使用PreparedStatement
并批量处理您的请求。
它们可能需要很长的时间,因为您每次都要往返。批量将帮助很多,因为你只会做一次往返。
看起来好像您在查询中硬连接谓词和更新值。通过使用绑定变量,您可能可以提高性能。对于绑定变量,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;
SOME_ID和状态都从那里取价值? – 2011-06-17 10:43:16