博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Batch update
阅读量:5988 次
发布时间:2019-06-20

本文共 1602 字,大约阅读时间需要 5 分钟。

做现在这个项目的时候 碰到这样一个问题: 关于积分计算,按照正常的思路 在table里面直接存储balance,每次用了 或者是有积分返还的时候 计算以后直接存在表里就可

以了,之后不管是报表还是export每个客户的积分的时候 直接从表里面拿出来就可以了。但是这个项目需求理 积分是每个月导入一次,而且只是导入一个积分上限 所以说

balance只能临时计算。

这样问题就来了,在项目测试的时候,有6000个客户的时候,要计算6000次,每次都要计算已经用过的,用上限减去已用的 得到balance。这个效率很低,6000个客户大概

要3分多钟。客户完全不能忍受这个效率。

google了一天,找到了一个相对比较完美的解决方案。sql server里面有一个batch process的概念(对于这个的原理还是没有深入了解, 大概就是把执行语句放在一个执行

计划里(可能与cpu的交互次数要少了)从而提高了执行效率。

以下是具体代码:

1 SELECT * INTO #Temp 2 FROM dbo.V_Customer 3  4 alter table #Temp ADD 5 process nchar(1) not null default ('0') 6  7  select SUM(isnull(Amount,0)) EntitlementUsed ,Customer_Id INTO #Temp2 8             from [Trace_Customer_Entitlement]  9             where Modi_Date >= dbo.Func_Check_LatestAnnual(GetDate())10             group by Customer_Id11 12 13 declare @i int14 declare @records int15 declare @count int16 declare @lastcount int17 set @i=018 select @records=COUNT(*) from V_Customer19 set @count = @records/200020 set @lastcount = @records%200021 if @lastcount > 022      set @count = @count + 123 WHILE (@i<@count) 24 begin25     UPDATE TOP ( 2000 ) #Temp 26     SET #Temp.Balance= A.Entitlement+(isnull((select EntitlementUsed from #Temp2 where #Temp2.Customer_Id=A.Customer_Id),0)                 27     )28     ,#Temp.process='1'29     FROM #Temp A30     inner join dbo.V_Customer B ON A.Customer_Id=B.Customer_Id31     where A.process='0'32     33     set @i=@i+134     35  end36  37  38  select * from #Temp where Customer_Id=552839  40   select * from #Temp241  42  43  drop table #Temp44  drop table #Temp2
View Code

 

转载于:https://www.cnblogs.com/Jenny90/p/3503640.html

你可能感兴趣的文章
Frameworks 目录
查看>>
Android -- SharedPreferences存储信息
查看>>
C++的函数重载和main函数之外的工作
查看>>
js中的hasOwnProperty和isPrototypeOf方法
查看>>
杂七杂八的面试概念
查看>>
递归算法浅谈
查看>>
赵雅智_ListView_BaseAdapter
查看>>
20款优秀的国外 Mobile App 界面设计案例
查看>>
github简单使用教程
查看>>
使用instantclient_11_2 和PL/SQL Developer工具包连接oracle 11g远程数据库(转)
查看>>
娓娓道来c指针 (0)c语言的梦魇:c指针
查看>>
samsungGalaxyS4USB驱动
查看>>
myqltransactionRollbackexception deadlock found when trying to get lock
查看>>
Linux 在线模拟器
查看>>
NavigationBar 背景颜色,字体颜色
查看>>
右键菜单 GenericMenu
查看>>
〖Linux〗Kubuntu14.04 平滑字体的设置
查看>>
Windows SVN局域网设置连接
查看>>
jquery.elevateZoom实现仿淘宝看图片,一张小的,一张大用于鼠标经过时候显示
查看>>
Android WebRTC 音视频开发总结(一)
查看>>