Я пытался найти его в Интернете, но не смог найти ничего, что уладит мои сомнения.MERGE vs. UPDATE
Я хочу выяснить, какой из них лучше использовать, когда и почему?
Я знаю, что MERGE обычно используется для upsert, но есть случаи, когда нормальное обновление с подзапросом должно выбирать дважды из таблицы (одно из предложения where).
т.д .:
MERGE INTO TableA s
USING (SELECT sd.dwh_key,sd.serial_number from [email protected]_devstg sd
where sd.dwh_key = s.dwh_key and sd.serial_number <> s.serial_number) t
ON(s.dwh_key = t.dwh_key)
WHEN MATCHED UPDATE SET s.serial_number = t.serial_number
В моем случае, я должен обновить таблицу с около 200mil записей в одном enviorment, на основании той же таблицы из другого enviorment, где изменение имеет происходить на поле SERIAL_NUMBER. Как вы можете видеть, он выбирает onces из этой огромной таблицы.
С другой стороны, я могу использовать UPDATE ЗАЯВЛЕНИЕ вроде этого:
UPDATE TableA s
SET s.serial_number = (SELECT t.serial_number
FROM [email protected]_Other t
WHERE t.dwh_serial_key = s.dwh_serial_key)
WHERE EXISTS (SELECT 1
FROM [email protected]_Other t
WHERE t.dwh_serial_key = s.dwh_serial_key
AND t.serial_number <> s.serial_number)
Как вы можете видеть, это выбрать из огромного стола уже дважды. Итак, мой вопрос: что лучше? почему? .. в каких случаях один будет лучше, чем другой.
Заранее спасибо.
Не можете ли вы исправить это обновление (перейдите к таблице соединений на себя), а затем проверьте скорость/план выполнения? – Veljko89
@ Veljko89 и как я могу это сделать в оракуле? – sagi
Не работает много с оракулом, но я уверен, что в нем есть внутреннее соединение ... Я мог бы попытаться записать его, дайте немного минут – Veljko89