Oracle Merge vs Select, затем вставка или обновление

Что быстрее?

заявление слияния

    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 ответа

Решение

Практическое правило заключается в том, что если вы можете сделать это в одном 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)

Позаботься о слиянии. Это может потреблять много вашей области TEMP с помощью HASH JOIN, Проверьте его, используя подсказку FIRST_ROWS или использовать UPDATE смотреть присоединиться плюс INSERT с NOT EXISTS,

Другие вопросы по тегам