我試圖在網上尋找它,但找不到任何解決我疑惑的事情。MERGE與更新
我想知道哪一個更好用,何時和爲什麼?
我知道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
就我而言,我有一個enviorment更新與約200mil記錄的表的基礎上,從另一個enviorment,變革已經發生在SERIAL_NUMBER場相同的表。正如你所看到的,它從這張巨大的表格中選擇了一些。現在的兩倍
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)
正如你所看到的,這個選擇從巨大的表:
在另一方面,我可以使用UPDATE語句這樣。所以,我的問題是,什麼更好?爲什麼?..哪一種情況會比另一種好..
在此先感謝。
難道你不能修復該更新(去與自己的連接表),然後檢查速度/執行計劃? – Veljko89
@ Veljko89和我會怎麼做在oracle? – sagi
與oracle沒有多大作用,但我確定有內部聯接...我可以嘗試寫下來,給我幾分鐘 – Veljko89