我有下面的这条SQL语句:
select nvl(sum(d.fqty), 0) into vStkedQty
from tfrestorealc m, tfrestorealcdtl d, tfreord mo, tfreorddtl md
where m.num = d.num and m.stat = PWM_DEF.staConfirmedId and mo.stat = PWM_DEF.staAuditedId
and instr(d.ffreorddtl, mo.num) > 0 and mo.num = md.num
and md.farticle = d.farticle and m.num between PWM_DEF.syscode || TO_CHAR(SYSDATE - 7, 'YYMMDD') and PWM_DEF.syscode || TO_CHAR(SYSDATE + 1, 'YYMMDD')
and mo.num between PWM_DEF.syscode || TO_CHAR(SYSDATE - 7, 'YYMMDD') and PWM_DEF.syscode || TO_CHAR(SYSDATE + 1, 'YYMMDD')
and d.farticle = qq.farticle; 其中,tfrestorealc表的主键是num,tfrestorealcdtl表的主键是num,line;tfreord表的主键是num,tfreorddtl表的主键是num,line; 以前这条语句执行的时间一直很短,前几天的时候,执行的时候突然就变成了十几秒;我把搜索范围由七天改成三天,执行时间就又变得很快了。 前七天和前三天的tfrestorealcdtl数据分别是:29993、13003,前七天和前三天的tfreorddtl数据分别是:3507、1527。 哪位知道这是怎么回事呀?除了把搜索时间变短以外,还有什么其他的好办法呀?
select nvl(sum(d.fqty), 0) into vStkedQty
from tfrestorealc m, tfrestorealcdtl d, tfreord mo, tfreorddtl md
where m.num = d.num and m.stat = PWM_DEF.staConfirmedId and mo.stat = PWM_DEF.staAuditedId
and instr(d.ffreorddtl, mo.num) > 0 and mo.num = md.num
and md.farticle = d.farticle and m.num between PWM_DEF.syscode || TO_CHAR(SYSDATE - 7, 'YYMMDD') and PWM_DEF.syscode || TO_CHAR(SYSDATE + 1, 'YYMMDD')
and mo.num between PWM_DEF.syscode || TO_CHAR(SYSDATE - 7, 'YYMMDD') and PWM_DEF.syscode || TO_CHAR(SYSDATE + 1, 'YYMMDD')
and d.farticle = qq.farticle; 其中,tfrestorealc表的主键是num,tfrestorealcdtl表的主键是num,line;tfreord表的主键是num,tfreorddtl表的主键是num,line; 以前这条语句执行的时间一直很短,前几天的时候,执行的时候突然就变成了十几秒;我把搜索范围由七天改成三天,执行时间就又变得很快了。 前七天和前三天的tfrestorealcdtl数据分别是:29993、13003,前七天和前三天的tfreorddtl数据分别是:3507、1527。 哪位知道这是怎么回事呀?除了把搜索时间变短以外,还有什么其他的好办法呀?
alter index 索引名 rebuild
把相关表的统计信息删除了再看看
analyze table 表名 delete statistics