Обновление Oracle, внесите ~ 24000 изменений - PullRequest
1 голос
/ 17 июня 2011

Я хочу сделать запрос или какую-нибудь функцию в Oracle, которая может обновить ~ 24000 строк. Например, 1 запрос на обновление выглядит так:

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

«some_id» и «number_id» различны в каждом запросе.

Проблема в том, что выполнение одного за другим занимает слишком много времени, мне нужно более быстрое решение.

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

Поместите переменные значения в таблицу, а затем используйте их в своем запросе:

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);
1 голос
/ 17 июня 2011

Похоже, что вы жестко запрограммировали предикаты и обновили значения в своем запросе.Вы могли бы немного улучшить производительность, используя переменные связывания.С переменными связывания Oracle требуется только один жесткий анализ для всех 24k идентичных операторов SQL UPDATE вместо 24k жесткого анализа (и планов обновления) для 24k различных операторов SQL UPDATE.

С Java:

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

С другими инструментами:

update numbers
set status = :1, some_id = :2
where number_id = :3;
0 голосов
/ 17 июня 2011

Напишите хранимую процедуру PL-SQL и передайте параметры.Позвоните один раз и все будет готово.

Или используйте PreparedStatement и пакетируйте свои запросы.

Они, вероятно, занимают слишком много времени, потому что вы выполняете обход туда и обратно для каждого.Пакет очень поможет, потому что вы совершите только одну поездку туда и обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...