ORACLE 大数据批量更新 MERGE INTO 代替 UPDATE/INSERT INTO 提升性能

最近写存过的时候,从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用 MERGE INTO 代替 UPDATE 执行批量更新,会提升执行效率。

MERGE INTO语法如下:

MERGE INTO table_name alias1 
USING (table|view|sub_query) alias2
ON (join condition) 
WHEN MATCHED THEN 
    UPDATE table_name 
    SET col1 = col_val1, 
        col2     = col2_val 
WHEN NOT MATCHED THEN 
    INSERT (column_list) VALUES (column_values); 

举个简单的例子:

MERGE INTO TEST_MERGE_INTO T1
USING TEST_MERGE_INTO_DETAIL T2
ON (T1.ID = T2.ID)
WHEN MATCHED THEN
  UPDATE SET ITEM_NAME = T2.ITEM_NAME
WHEN NOT MATCHED THEN
  INSERT (ID, ITEM_NO, ITEM_NAME) VALUES (1, '031', 'api');
COMMIT;

为什么会提升性能呢?

因为 UPDATE 关联子查询写法,是选到一条做一次子查询,这种写法得更新少,走好的索引才行,MERGE 写法是执行完 ON 后一次性更新,效率会好点。

猜你喜欢

转载自blog.csdn.net/qq_33269520/article/details/78961234