两个库a,b 建立了DBLINK用来连接
从B库的4个表取一些数据向A库的一个表中插入,SELECT B库的时候只用10秒中就检索出了我需要的数据。但是向A库中的表插入的时候却需要差不多20分钟。也没有主键冲突。请问我应该怎样做能插入的快一些。
insert into dssf_ab
select 20060801,d.dept_code,d.dept_name,c.ELEC_TYPE_CODE,sum(c.P_POWER),
sum(c.V_POWER),sum(c.N_POWER),sum(c.P_NUM_MONEY+c.P_PLUS_TOTAL),
sum(c.v_NUM_MONEY+c.v_PLUS_TOTAL),sum(c.n_NUM_MONEY+c.n_PLUS_TOTAL)
from df_money_files@tjnd c,df_write_sect@tjnd b,price_type@tjnd e,rs_dept@tjnd d
where b.WRITE_SECT_NO=c.WRITE_SECT_NO and b.business_place_code=d.dept_code  and  d.dept_level_flag='3' and c.price_code=e.price_code 
         and c.ELEC_TYPE_CODE not in('0','4')  and b.mon=c.mon and c.mon_sn='1'
         and to_number(to_char(b.mon,'yyyymm'))=200608
检索出来的语句与dssf_ab里的字段是一一对应的

解决方案 »

  1.   

    insert into dssf_ab
    改为
    insert into /*+ append */dssf_ab
      

  2.   

    老大 这个insert into /*+ append */dssf_ab中的 /*+ append */是什么意思呀,小弟接触ORACLE时间不长,望指点一二呀
      

  3.   

    SELECT B库的时候只用10秒中就检索出了我需要的数据
    估计是前多少行吧?改为优化提示的话,速度会有提高的
      

  4.   

    10秒中估计只是看到前面几条记录,有没有append提示速度相差不会这么大。
      

  5.   

    嫌慢的话,如果不是经常这样的话
    先select出来,然后导出来成文本,再导进去
      

  6.   

    两个库a,b 建立了DBLINK用来连接
    从B库的4个表取一些数据向A库的一个表中插入,SELECT B库的时候只用10秒中就检索出了我需要的数据。但是向A库中的表插入的时候却需要差不多20分钟。也没有主键冲突。请问我应该怎样做能插入的快一些。
    insert into dssf_ab
    select 20060801,d.dept_code,d.dept_name,c.ELEC_TYPE_CODE,sum(c.P_POWER),
    sum(c.V_POWER),sum(c.N_POWER),sum(c.P_NUM_MONEY+c.P_PLUS_TOTAL),
    sum(c.v_NUM_MONEY+c.v_PLUS_TOTAL),sum(c.n_NUM_MONEY+c.n_PLUS_TOTAL)
    from df_money_files@tjnd c,df_write_sect@tjnd b,price_type@tjnd e,rs_dept@tjnd d
    where b.WRITE_SECT_NO=c.WRITE_SECT_NO and b.business_place_code=d.dept_code and  d.dept_level_flag='3' and c.price_code=e.price_code 
             and c.ELEC_TYPE_CODE not in('0','4')  and b.mon=c.mon and c.mon_sn='1'
             and to_number(to_char(b.mon,'yyyymm'))=200608
    检索出来的语句与dssf_ab里的字段是一一对应的
    -----------------------------------------------------------------------------这个问题如果是我来处理的话,最最简洁的方法如下:
    首先,在B库建这个临时表
    CREATE TABLE tempA AS 
    select 20060801,d.dept_code,d.dept_name,c.ELEC_TYPE_CODE,sum(c.P_POWER),
    sum(c.V_POWER),sum(c.N_POWER),sum(c.P_NUM_MONEY+c.P_PLUS_TOTAL),
    sum(c.v_NUM_MONEY+c.v_PLUS_TOTAL),sum(c.n_NUM_MONEY+c.n_PLUS_TOTAL)
    from df_money_files c,df_write_sect  b,price_type  e,rs_dept  d
    where b.WRITE_SECT_NO=c.WRITE_SECT_NO and b.business_place_code=d.dept_code and  d.dept_level_flag='3' and c.price_code=e.price_code 
             and c.ELEC_TYPE_CODE not in('0','4')  and b.mon=c.mon and c.mon_sn='1'
             and to_number(to_char(b.mon,'yyyymm'))=200608
    其次,将B库的临时表同步到A库
    CREATE TABLE tempB AS SELECT * FROM tempA@B,
    最后,按需要的取值,扰共分三步。按这个操作步骤来操作速度应该说不是问题。