2011-06-17 59 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;