Слияние или обновление - PullRequest
       1

Слияние или обновление

2 голосов
/ 26 января 2012

В настоящее время мой запрос очень тяжелый, таблица (таблица A), которую нужно обновить, содержит 21 миллион записей, а другая таблица (таблица B) содержит 15 миллионов записей.для всех записей в таблице B записи в таблице A необходимо обновить.Используя V $ SESSION_LONGOPS, я вижу, что выполнение запроса займет 30 часов.Так кто-нибудь знает, лучше ли объединить и обновить или просто обновить

ниже моего запроса на обновление, я уже установил индекс в таблице соединений.это только временная таблица, которую я создал, которую я добавлю после вставки.(не внешний стол)

UPDATE ITEM_LOC IL
SET 
IL.STATUS= 'D'                    ,
IL.LAST_UPDATE_DATETIME= SYSDATE  ,
IL.LAST_UPDATE_ID = 'CNVOBJ_RNG'
where exists
(select il.item, il.loc from item_loc il
join DC_ITEM_LOC DC_IL ON DC_IL.ITEM = IL.ITEM AND DC_IL.LOC = IL.LOC);

Ответы [ 2 ]

3 голосов
/ 26 января 2012

Это не будет делать то, что вы ожидаете.Это обновит каждую запись ITEM_LOC (если ITEM_LOC и DC_ITEM_LOC имеют хотя бы одну общую запись).Ваш запрос выполняет полный подзапрос для каждой строки из ITEM_LOC, поэтому он занимает так много времени.

Ваше полусоединение должно быть написано так:*

Обновление миллиона строк должно занимать считанные секунды, а не часы.

0 голосов
/ 26 января 2012

Попробуй так, это должно сильно поднять;)

UPDATE ITEM_LOC
SET 
IL.STATUS= 'D'                    ,
IL.LAST_UPDATE_DATETIME= SYSDATE  ,
IL.LAST_UPDATE_ID = 'CNVOBJ_RNG'
FROM ITEM_LOC IL
INNER JOIN DC_ITEM_LOC DC_IL ON DC_IL.ITEM = IL.ITEM AND DC_IL.LOC = IL.LOC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...