在C中使用Oracle 11g Pro * C,我使用主机阵列来管理批量合并到DB表中,如下例所示:
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)
我的第一个问题是:这种批量合并方式是否优于先运行查询获取rowid然后如果找不到,则插入并更新。我在这里找到了讨论: Oracle Merge vs Select then Insert or Update并且认为合并比查询更好,然后插入或更新。
我的第二个问题是,当音量增加时,我观察到性能下降。与具有较低数据量的DB相比,与较高的卷合并需要更多时间。是否可以通过微调来提高性能,而不是通过增加音量来降低性能?
在Pro * C边界内有哪些改进的可能性?
从http://www.dba-oracle.com/t_append_upsert_merge_sql.htm,似乎使用APPEND提示与MERGE(upsert)SQL会更好吗?请分享您的观点。