oracle存储过程延迟,请问oracle中select * from 某个存储过程时速度很慢的有关问题...

请教oracle中select * from 某个存储过程时速度很慢的问题。

流程是:首先导入一些5000条左右的hphm到cph_tmp表中,然后执行存储过程P_QUERY_CAR,存储过程P_QUERY_CAR会获取cph_tmp表中的数据,然后 进行一些过程的执行,执行完毕后,存储过程P_QUERY_CAR会将数据导入到tmp_query_car表中, 之后对tmp_query_car表进行select * from tmp_query_car 或者 delete from tmp_query_car时 速度很慢,需要800多秒,  起初查询的速度 都在几秒之内,现在查询这个存储过程需要800多秒,一时搞不通到底是哪个环节出现了问题,请教大咖们,怎么才能提高对tmp_query_car表DML操作的速度?

存储过程名为P_QUERY_CAR:

create or replace procedure P_QUERY_CAR is

v_pname varchar2(100) default 'P_QUERY_CAR';

v_ecode varchar2(50);

v_error varchar2(2000);

--主程序

begin

P_LOG(v_pname, 'INFO', 'START', 'P_QUERY_CAR');

for rs in (select hphm from cph_tmp) loop

begin

insert into tmp_query_car

(hphm, cpys, jcsj, ddms)

select /*+index(v idx_tt_veh_hphm)*/

v.hphm, v.cpys, v.jcsj,d.ddms

from tt_vehicle_t v, tt_device_t d

where v.hphm = rs.HPHM

and v.jcsj between

to_date('2014-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and

to_date('2014-09-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss')

and v.sbbh = d.sbbh;

--and v.dmbh in (select d.dmbh from d_jcddm_t d where instr(d.hldm, '22') > 0);

--and v.sbbh in ('TT001258','TT001259','JGJ30548','JGJ30546','JGJ30549');

commit;

exception

when others then

rollback;

end;

end loop;

commit;

P_LOG(v_pname, 'INFO', 'STOP', 'P_QUERY_CAR');

exception

when others then

rollback;

--记录错误信息

v_ecode := substr(sqlcode, 1, 50);

v_error := substr(sqlerrm, 1, 2000);

P_LOG(v_pname, 'ERROR', v_ecode, v_error);

end P_QUERY_CAR;

cph_tmp表:

Name Type         Nullable Default Comments

---- ------------ -------- ------- --------

HPHM VARCHAR2(20)

tmp_query_car表:

Name Type          Nullable Default Comments

---- ------------- -------- ------- --------

HPHM VARCHAR2(20)  Y

CPYS VARCHAR2(10)  Y

JCSJ TIMESTAMP(6)

DDMS VARCHAR2(100) Y

------解决思路----------------------

频繁用delete删除容易造成高水位,delete之后数据虽然没有了,但占用的空间还在

如果删除临时数据时是全表删除的话,建议使用truncate进行清除,这样直接就能把水位降到0了

------解决思路----------------------

1.  tt_vehicle_t v, tt_device_t  这两张表的数据是否很大?

2. 手动收集一下统计信息。

3. 版主所言极是。 1#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值