数据不多,但速度奇慢,有什么有关问题了,看小弟我的PL/SQL

数据不多,但速度奇慢,有什么问题了,看我的PL/SQLStime:to_char(sysdate-to_number(to_char(sysdate-1,D )

数据不多,但速度奇慢,有什么问题了,看我的PL/SQL
Stime:=to_char(sysdate-to_number(to_char(sysdate   -   1,   'D '))+1, 'YYYY-MM-DD ');
Etime:=to_char(sysdate-to_number(to_char(sysdate   -   1,   'D '))+1, 'YYYY-MM-DD ');
Open   TEMP_CURSOR   For   select   IBITM,IBLITM,IBMCU,IBVEND,
(select   ABALKY   from   F0101   where   A.IBVEND=F0101.ABAN8   and   rownum <2),
(select   IMLITM   from   F4101   where   A.IBITM=F4101.IMITM   and   rownum <2),
(select   IMDSC1   from   F4101   where   A.IBITM=F4101.IMITM   and   rownum <2),IBLTLV,
(select   BPUPRC   from   F4106   where   A.IBITM=F4106.BPITM   and   rownum <2),
(select   ABALPH   from   F0101   where   A.IBBUYR=F0101.ABAN8   and   rownum <2),
(select   ABALPH   from   F0101   where   A.IBANPL=F0101.ABAN8   and   rownum <2),IBSAFE,
(select   sum(LIPQOH)   from   F41021   where   A.IBITM=LIITM   and   A.IBMCU=LIMCU),
(select   Sum(F4311.PDUOPN)   from   F4311   where   A.IBVEND=F4311.PDAN8   and   A.IBMCU=F4311.PDMCU   and   A.IBITM=F4311.PDITM   and   F4311.PDUOPN> 0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd '), 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+1   *7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+1*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+2*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+2*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+3*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+3*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+4*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+4*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+5*7, 'YYYY-MM-DD ')),0),


Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+5*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+6*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+6*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+7*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+7*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+8*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+8*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+9*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+9*7   , 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+10*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+10*7, 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+11*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(to_Date(Stime, 'yyyy/mm/dd ')+11*7, 'YYYY-MM-DD ')   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(to_Date(Etime, 'yyyy/mm/dd ')+12*7, 'YYYY-MM-DD ')),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(add_months(to_Date(Stime, 'yyyy/mm/dd ')+11*7,1), 'YYYY-MM ')|| '-1 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(add_months(to_Date(Stime, 'yyyy/mm/dd ')+11*7,2), 'YYYY-MM ')|| '-01 '),0),


Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(add_months(to_Date(Stime, 'yyyy/mm/dd ')+11*7,2), 'YYYY-MM ')|| '-1 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(add_months(to_Date(Stime, 'yyyy/mm/dd ')+11*7,3), 'YYYY-MM ')|| '-01 '),0),
Nvl((select   sum(SDUORG)   from   F4211   where   trim(SDITM)=trim(A.IBITM)   and   trim(SDMCU)=trim(A.IBMCU)   and   SDNXTR < '560 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ')> =to_char(add_months(to_Date(Stime, 'yyyy/mm/dd ')+11*7,3), 'YYYY-MM ')|| '-1 '   and   to_char(to_date(to_char(SDDRQJ+1900000), 'YYYYDDD '), 'YYYY-MM-DD ') <to_char(add_months(to_Date(Stime, 'yyyy/mm/dd ')+11*7,4), 'YYYY-MM ')|| '-01 '),0),
Nvl((Select   MFFQT   From   VIEW55CH126   Where   trim(MFLITM)=trim(A.IBLITM)   and   rownum <2),0),
Nvl((Select   SSVSPC   from   F43211   where   trim(SSMCU)=trim(A.IBMCU)   and   trim(SSITM)=trim(A.IBITM)   and   trim(SSAN8)=trim(A.IBVEND)   and   rownum <2),0)
from   F4102   A;
F4102   总共才一万多数据,但处理起来几个小时都完不成,有什么办法精简一下吗?

[解决办法]
你的SQL写的太复杂了吧,一个表一万条数据,几个一万条数据关联起来需要很长时间也不惊怪,你把这个复杂的语句拆成小的语句,通过中间变量来转换值,这样可能就会提高效率了。
[解决办法]
你帖出執行計劃來看看

看代碼頭痛
[解决办法]
太多nvl trim to_char

也太多列子查迅了 設計方面估計存在問題

Nvl((Select SSVSPC from F43211 where trim(SSMCU)=trim(A.IBMCU) and trim(SSITM)=trim(A.IBITM) and trim(SSAN8)=trim(A.IBVEND) and rownum <2),0)

不要對條件字段加函數

Nvl((Select SSVSPC from F43211 where SSMCU=A.IBMCU and SSITM=A.IBITM and SSAN8=A.IBVEND and rownum <2),0)