天天看點

PLSQL_性能優化系列17_Oracle Merge Into和Update更新效率

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>