正文

MERGE的性能問題

(2010-10-07 19:39:03) 下一個
探討性能優化方案時,有人提出用MERGE來替代SELECT/UPD/INSERT組合。

用MERGE能提高性能嗎?網上的資料有兩種說法:
(1)MERGE隻是簡化代碼的一種編程手法,不能提高性能
(2)MERGE使用的是FULL TABLE SCAN,不使用INDEX,性能隻有更差

還是讓事實說話吧。

①兩個表T1、T2,T1中做成有10000條記錄,T2中做成有5000條記錄,執行的結果是插入5000條、更新5000條。

測試1:用MERGE命令,一次性批量導入;
測試2:對T1表做成遊標(Cursor),然後在fetch的循環中,用MERGE命令,逐條紀錄進行處理;
測試3:對T1表做成遊標(Cursor),然後在fetch的循環中,用SELECT/UPD/INSERT組合,逐條紀錄進行處理;

測試2/3更符合此次項目的實際,T2表更新/插入之前,需要對根據T1取得的某些字段值,進行複雜的編輯處理,用測試1的方法很難實現。

測試結果,測試1最快,測試3比測試2快。

②給T1、T2加INDEX,再重做測試。測試結果,還是測試1最快,測試3比測試2快。但這一次的測試,測試2、測試3的結果都比沒有INDEX時有明顯改善。

③分別用一時表和內存表做測試,速度快慢的順序不變。

結論:(1)批量導入時,MERGE命令的速度非常快
(2)循環逐條處理的場合,MERGE命令沒有性能優勢,SELECT/UPD/INSERT組合更快
(3)INDEX對MERGE速度的提升是有作用的。但具體什麽場合起作用,此次測試不充分,資料也不足。
[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.