Bo's Oracle Station

查看: 2843|回复: 1

求助_数据整合_快哭了

[复制链接]

2

主题

3

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2016-8-11 09:36:23 | 显示全部楼层 |阅读模式
本帖最后由 woshiwhs 于 2016-8-11 09:39 编辑

环境AIX  9i RAC  AB两个表空间,同名的表,B往A插入比A多的,大部分都千万级别
AB字段基本一样,AB有相同字段的主键
我现在的做法是

insert /*+ append nologging*/ into A.a  select * from B.a where not exists  select * from A.a where A.a.主键=B.a.主键


怎样提高效率,经常一张表要3,4个钟头
求助!!!
生产环境,有开归档




回复

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2016-8-11 09:48:58 | 显示全部楼层
本帖最后由 botang 于 2016-8-11 10:30 编辑

关联子查询,当然非常慢。

解决一:
做个视图,然后用视图和表做连接。


解决二:

SQL> conn   / as sysdba
Connected.
SQL> create user u1 identified by oracle ;

User created.

SQL> create user u2 identified by oracle ;

User created.

SQL> grant resource , connect to u1;

Grant succeeded.

SQL> grant resource , connect to u2;

Grant succeeded.

SQL> conn u1/oracle
Connected.
SQL> create table a  ( col  number   )    ;

Table created.

SQL> conn u2/oracle
Connected.
SQL> create table a  ( col  number   )    ;

Table created.

SQL> insert into  a values (888) ;

1 row created.

SQL> commit;


  1. SQL> conn / as sysdba
  2. Connected.
  3. SQL> merge /*+ append nologging */ into u1.a ua
  4.   2  using u2.a ub
  5.   3  on ( ua.col=ub.col )
  6.   4  when not matched then insert ( col)
  7.   5  values (ub.col);

  8. 1 row merged.
复制代码






回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-3-28 19:19 , Processed in 0.033385 second(s), 24 queries .

快速回复 返回顶部 返回列表