两个库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库的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里的字段是一一对应的
解决方案 »
- solaris下使用dbca创建数据库报错:ora-12560
- 如何创建现有数据库结构的脚本
- 根据用户输入的表名及字段名等参数动态查询 ,用户可选多个字段
- pl/sql continue
- 如何在Oracle数据库中记录用户在任何时间所做的重要操作
- Oracle 9i 登入问题(特急100分相送)
- 求一游標!對了馬上接帖
- 如何在Plus中控制查询结果的输出显示
- case when 可不可以判斷某字段是否為空。如:case when bookqty1 is null then bookqty1 else bookqty2
- SQL查询效率
- 这句插入语句错在哪里? INSERT INTO TB_ACTIVE (uid, environ, time) VALUES (201378615, 0, Sun Jul 16 23:59:58 CST 2006)
- Oracle是英文的,怎样找汉话包并按到Oracle10G中?
改为
insert into /*+ append */dssf_ab
估计是前多少行吧?改为优化提示的话,速度会有提高的
先select出来,然后导出来成文本,再导进去
从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,
最后,按需要的取值,扰共分三步。按这个操作步骤来操作速度应该说不是问题。