Используя Oracle 11g Pro * C в C, я использую массивы хостов для управления массовым слиянием в таблицу БД, как показано в следующем примере:
merge into TBL_NM A
using (select 1 from dual) B
on (col1 = to_date(:v,'YYMMDD') and col2 = :v and col3 = :v and col4 = :v)
when matched then
update set col5 = :v, col2 = col2+ :v, col3 = col3 + :v
when not matched then
insert (col1, col2, col3, col4, col5, col6, col7, col8)
values (to_date(:v,'YYMMDD'),:v,:v,:v,:v,:v,:v,:v)
Мой первый вопрос: лучше ли этот способ массового слияния, чем сначала выполнить запрос, чтобы получить идентификатор строки, а затем, если он не найден, вставить и обновить в противном случае. Я нашел здесь обсуждения: Oracle Merge vs Select then Insert or Update и понял, что слияние лучше, чем запрос, а затем вставка или обновление.
Мой второй вопрос заключается в том, что я наблюдаю ухудшение производительности при увеличении громкости. Слияние с большими объемами занимает больше времени по сравнению с БД с меньшим объемом данных. Можно ли это настроить, чтобы повысить производительность, а не снижать производительность при увеличении громкости?
Каковы возможности улучшения в рамках Pro*C?
Из http://www.dba-oracle.com/t_append_upsert_merge_sql.htm это Кажется, лучше использовать подсказку APPEND с SQL MERGE (upsert)? Пожалуйста, поделитесь своим мнением.