2017-10-19 97 views
1

我需要update表的字段中Merge Into聲明,我在做什麼是這樣的的Oracle SQL:更新

MERGE INTO A_TABLE a 
USING (ANOTHER_TABLE b) 
ON (SOME_PK) 
WHEN MATCHED THEN 
UPDATE 
SET a.field = b.field 
WHERE a.field != b.field 

我的問題前,檢查數據庫字段的值是關於最後我檢查這些值是否爲equal or not。我可以聲稱這些表之間可能只有%2 difference。在這種情況下,我會在WHERE條款中輸贏什麼?也許oracle在這種情況下有一些優化,其中更新的字段與將要設置的值相同。

+0

離開聲明沒有問題。 。 。假設舊的和新的值都不是「空」。 –

+0

請刪除您的評論之一。我知道沒有問題,我有dbUnit測試證明這一點。我在問什麼是優點或缺點。 –

+0

@Erdiİzgiiki durumdaki'解釋計劃'dan gelen,'cost'değerlerinebakmıştınızdeğilmi Erdi bey? –

回答

1

問題是,我可以使用WHERE子句或沒有它來完成此任務。沒有WHERE語句,我正在進行1M更新,我有1M次檢查+ 20K更新。我在問哪一個更好。

在我看來1M checks + 20K updates更好。原因:你需要更新

1)更新行,也沒有使身份運行A => A

2)如果您有該表觸發器您可以在故障結束點。

  • 更新LAST_UPDATE日期(對於合併的每次調用它看起來就像整個表已經改變)

  • 插入到歷史表(大量重複的)

3)可能在自動刷新的情況下在該表的頂部具有物化視圖

4)更新索引/檢查外鍵的額外開銷