Я хочу настроить свой запрос на слияние, который вставляет и обновляет таблицу в Oracle на основе исходной таблицы на SQL сервере. Размер таблицы составляет около 120 миллионов строк, и обычно ежедневно вставляются / обновляются около 120 тысяч записей. Выполнение слияния занимает около 1,5 часов. Он использует вложенный l oop и индекс первичного ключа для выполнения вставки и обновления. В исходной таблице нет даты обновления записи для использования; поэтому все записи сравниваются.
Merge abc tgt
using
(
select a,b,c
from sourcetable@sqlserver_remote) src
on (tgt.ref_id = src.ref_id)
when matched then
update set
.......
where
decode(tgt.a, src.a,1,0) = 0
or ......
when not matched then
insert (....) values (.....);
commit;
Поскольку таблица огромна и растет с каждым днем, я разделил таблицу в DEV на основе идентификатора ссылки (10 групп) и создал локальный индекс по идентификатору ссылки. Теперь он использует ha sh join и полное сканирование таблицы и работает дольше существующего процесса. Когда я перешел с локального на глобальный индекс (ref_id), я использовал вложенные циклы, но все равно выполнялся дольше, чем существующий процесс.
Есть ли способ настроить процесс на производительность.
Спасибо ...