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语句就能搞定,而且效率也比之前高出很多。
总结:在做项目的过程中,重要的不是着急完成任务,而是先有思路,如果当前思路明确,再考虑代码的优化性,这样还能省不时间,当然这样的思路不是一天两天就能成形,还需自己在项目中多去总结不断学习,学习别人学代码的思想。总之,加油吧。。。
一点一滴 坚持,汇成知识的海洋~ 希望自己能进步!