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
,