日期:2014-05-16  浏览次数:20862 次

关于ORACLE对大表操作的效率问题
oralce有一张大表数据量30w以上. table_name

现在我要将一定数量数据插入到table_name表中 如果表中存在就做更新 如果不存在就插入

有什么好的办法来实现这个功能?

------解决方案--------------------
方法1:merge into
方法2:先update後insert

30算很少的數據了,關聯列建索引

------解决方案--------------------
一个merge into的例子。从表tj_test merge到 tj_test1.

SQL code
create table tj_test(id number,name varchar2(20),age number);
insert into tj_test values (1,'jan',23);
insert into tj_test values (2,'kk',22);
insert into tj_test values (3,'joe',27);

create table tj_test1 as select * from tj_test where 1=0;
insert into tj_test1 values (1,'jlk',23);

merge into tj_test1 tt1 using tj_test tt on (tt1.id=tt.id)
  when matched then
    update set tt1.name=tt.name, tt1.age=tt.age
  when not matched then
    insert values(tt.id, tt.name, tt.age);

------解决方案--------------------
那你就先把Excel导入临时表。然后merge into