11

什么更快?

合并声明

    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'

如果行数 == 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'
4

2 回答 2

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)
于 2012-09-05T03:36:52.833 回答
-2

照顾合并。它可以TEMP使用HASH JOIN. 使用提示测试他FIRST_ROWS或使用UPDATEview join plus INSERTwith NOT EXISTS

于 2016-05-03T11:32:43.473 回答