Самый быстрый способ выполнить масштабное обновление - это параллельный DML, например:
alter session enable parallel dml;
update /*+ parallel(16) */ some_table set some_column = 1;
commit;
Есть много маленьких ошибок, на которые стоит обратить внимание.Вам нужно иметь Enterprise Edition.UPDATE
получит эксклюзивную блокировку таблицы, поэтому никто другой не сможет одновременно выполнять запись в таблицу.Ваша система должна иметь достаточно ресурсов для поддержки большого UPDATE
, такого как достаточное количество повторов, отмен, ЦП, операций ввода-вывода и разумно настроенной системы.
(Возможно, вы захотите изменить число 16в моем примере это число, соответствующее вашей системе. Если вы хотите максимизировать производительность, но, возможно, за счет других процессов, установите число, равное количеству ядер.)
Параллелизм Oracle - это здоровоно это не совсем оптимизирует.Это заставляет систему работать сложнее, а не умнее.Прежде чем вы попробуете распараллелить, вы можете взглянуть на оператор SQL, который используется в UPDATE
.Вы также можете попробовать использовать MERGE
вместо этого.Синтаксис MERGE
поначалу немного сложнее, но он может помочь избежать повторяющихся объединений и позволяет выполнять хеш-объединения, которые могут выполняться быстрее для изменения большого процента строк.