//想把各部门销售做一下汇总并按一定的格式导出来,代码如下:
但是当数量量很大的时候,查询速度特别慢,请问有什么方法能改进一下吗?
date sd
string sdate,ls_skt,sd1,ls_xx
dec ls_bb,ls_mr,ls_zb,ls_vz,ls_nz,ls_xm,ls_lx,ls_jj,ls_yd,ls_et
dec ls_jdgc,ls_cw,ls_dx,ls_jd,ls_pf,ls_gs,ls_cs
sdate = uo_1.of_getdate()
sd1=mid(sdate,1,4)+'.'+mid(sdate,5,2)+'.'+mid(sdate,7,2)
sd=date(sd1)
SELECT convert(int,ROUND(SUM(B.XSJE),0)) INTO :ls_mr from XSJL A,XSJLC B where A.SKTNO=B.SKTNO AND A.JLBH=B.JLBH AND JZRQ=:sd and DEPTID LIKE '01%';
.
.
.
SELECT convert(int,ROUND(SUM(B.XSJE),0)) INTO :ls_cs from XSJL A,XSJLC B where A.SKTNO=B.SKTNO AND A.JLBH=B.JLBH AND JZRQ=:sd and DEPTID LIKE '17%';
ls_jdgc = ls_cw + ls_dx + ls_jd + ls_pf
ls_bb = ls_mr + ls_zb + ls_vz + ls_nz + ls_xm + ls_lx + ls_jj + ls_yd + ls_et
ls_gs = ls_bb + ls_jdgc + ls_cs
mle_1.text = 'BM1:'+string(ls_gs)+';BM2:'+string(ls_bb)+';BM3:'+string(ls_jdgc)+';BM4:'+string(ls_cs)+&
+';BM5:'+string(ls_mr)+';BM6:'+string(ls_zb)+';BM7:'+string(ls_vz)+';BM8:'+string(ls_nz)+&
+';BM9:'+string(ls_xm)+';BM10:'+string(ls_lx)+';BM11:'+string(ls_yd)+';BM12:'+string(ls_jj)+';BM13:'+string(ls_et)+&
+';BM14:'+string(ls_cw)+';BM15:'+string(ls_dx)+';BM16:'+string(ls_jd)+';BM17:'+string(ls_pf)+'。'
------解决方案--------------------
1、最佳的优化要根据你的业务特点和表结构来写SQL,通过设置合适的聚集索引及非聚集索引来提供SQL效率;
2、你的这些SQL要与服务器交互17次,为什么不写成一条SQL放到数据窗口里面呢?
日期及字符型数据的对比速度也很慢,所以能用数字型的尽量用数据型的
SELECT left(deptid,2) as deptid,
convert(int,ROUND(SUM(B.XSJE),0)) from XSJL A,XSJLC B where A.SKTNO=B.SKTNO AND A.JLBH=B.JLBH AND JZRQ=:sd
group by left(DEPTID,2)
再根据数据窗口里面的deptid来设置每一个变量,这样只和服务器交互一次的;