2015-05-21 Created By BaoXinjian
一、摘要
以前隻考慮 merge into 隻是在特定場合下友善才使用的,今天才發現,merge into 竟然會比 update 在更新資料時有這麼大的改進。
其實呢,merge into部分的update和update也沒啥不同的,不同的地方在于使用merge into後執行計劃變了。
merge方法是最簡潔,效率最高的方式,在大資料量更新時優先使用這種方式。
1. 基本文法
update内聯視圖方式:使用這種方式必須在test2.id上有主鍵 (這裡很好了解,必須保證每一個test1.id對應在test2裡隻有一條記錄,如果test2中有多條對應的記錄,怎麼更新test1)
或者on (test1.id = test2.id, test1.name = test2.name ....),通過多欄位對比,确認唯一記錄,類似Unique Index
2. 使用并行,加快大量資料更新:
二、測試案例 - Update / Merge Into
1. 建立測試資料
2. 直接Update時間和效率
3. 通過Merge Into時間和效率
三、解析計劃
1. 通過Update的解析計劃
2. 通過Merge Into的解析計劃
四、結果分析
1. 測試結果對比:update和merge into 都更新1w條記錄,
update耗時6分鐘,邏輯讀消耗15275257;
merge into 耗時6秒鐘,消耗邏輯讀1586,相差太大了。
2. 其實看着執行計劃,這個結果也很容易了解:
update采用的類似nested loop的方式,對更新的每一行,都會對查詢的表掃描一次;
merge into這裡選擇的是hash join,則針對每張表都是做了一次 full table scan,對每張表都隻是掃描一次。
3. Oracle官方建議,在大資料更新過程中,也是通過使用Merge Into代替Update
Thanks and Regards
參考: http://blog.csdn.net/xiexbb/article/details/4242063
<b>ERP技術讨論群: 288307890</b>
<b>技術交流,技術讨論,歡迎加入</b>
<b>Technology Blog Created By Oracle ERP - 鮑建立</b>