Sqlserver 查询更新代码优化

前提:之前做一个项目,要求统计销售库存,如果库存表月末最后一天没有数据,就往前循环五天,例:

如当前查询3月31号库存数据,该数据表31号没有数据,数据就取29号,当前思路查询是用while 循环,如果没有数据往前循环5天,一直到取到数据为止。

如图:

可是当数据量大的时候,用循环的话会使数据查询变量,而且效率也不高,速度也很慢

代码优化改进:

update HBZY_SaleAreaTemp 
    set 
    --storemount=dbo.fn_HBZY_GetStoreMountLast(@saledate,productno,cityno), --被优化 用该语句和下面语句相差时间近10分钟
    storemount=isnull((select top 1 g.storemount from hbzy_sale g where g.storemount is not null and g.productno=HBZY_SaleAreaTemp.productno  and g.cityno=HBZY_SaleAreaTemp.cityno   and datediff(Day,@saledate,g.saledate)>-4  and datediff(Day,@saledate,g.saledate)<=0   ),0)
    
  
    where datediff(D,saledate,@saledate)=0

联表查询,如果判断如果直接以日期为条件:以日期排序,取一条传入参数日期内前5的数据,而且不能为空。这样的话一条Sql语句就能搞定,而且效率也比之前高出很多。

总结:在做项目的过程中,重要的不是着急完成任务,而是先有思路,如果当前思路明确,再考虑代码的优化性,这样还能省不时间,当然这样的思路不是一天两天就能成形,还需自己在项目中多去总结不断学习,学习别人学代码的思想。总之,加油吧。。。

posted @ 2014-04-24 15:43  LuckyZ  阅读(378)  评论(0编辑  收藏  举报