Oracle Merge vs Select然后选择Insert或Update

时间:2012-09-05 03:35:35

标签: sql oracle sql-merge

什么更快?

合并声明

    MERGE INTO table_name 
     USING dual
     ON (row_id = 'some_id')
    WHEN MATCHED THEN
     UPDATE SET col_name = 'some_val'
    WHEN NOT MATCHED THEN
     INSERT (row_id, col_name)
     VALUES ('some_id', 'some_val')

查询select语句,然后使用update或insert语句。

    SELECT * FROM table_name where row_id = 'some_id'

如果rowCount == 0

    INSERT INTO table_name (row_id,col_name) VALUES ('some_id','some_val')

否则

    UPDATE table_name SET col_name='some_val' WHERE row_id='some_id'

2 个答案:

答案 0 :(得分:23)

经验法则是,如果你可以在一个SQL中完成它,它通常比在多个SQL语句中执行它更好。

如果能做到这一点,我会选择MERGE。

另外 - 另一个建议:你可以避免在你的陈述中重复数据,例如:

MERGE INTO table
 USING (SELECT 'some_id' AS newid,
               'some_val' AS newval
        FROM dual)
 ON (rowid = newid)
WHEN MATCHED THEN
 UPDATE SET colname = newval
WHEN NOT MATCHED THEN
 INSERT (rowid, colname)
 VALUES (newid, newval)

答案 1 :(得分:-2)

照顾合并。它可以使用TEMP消耗您的大部分区域HASH JOIN。使用提示FIRST_ROWS对其进行测试,或使用UPDATE使用INSERT查看加入加NOT EXISTS