表HyMoneyAccount 记录每个会员得到的历史积分,
表HyClub 记录会员资料,并记录会员在活动中能获得的最高积分
此段代码,每执行一次,会给表中每个符合条件的会员(未达到可以获得最积分HyTopMoney<DTMoney),增加3个积分
现在hyclub中数据大概8w条,执行起来,很慢,应该如何优化,才能提高执行效率呢??
set rs1=nothing
set rs1=server.CreateObject("adodb.recordset")
sql ="select id,hynumber,HyTopMoney from HyClub"
rs1.Open sql,conn
if Rs1.Recordcount>0 Then
while (not Rs1.eof)
hynumberee=rs1("hynumber") '会员名
HyTopMoney=rs1("HyTopMoney") '活动中能获得的最高积分
Set HyRs8=nothing
set HyRs8=server.CreateObject("adodb.recordset")
sql = "select AMoney from HyMoneyAccount where HyNumber ='" & HyNumberee & "'"
HyRs8.Open sql,conn,1,1
if HyRs8.recordcount>0 then
DTMoney=HyRs8("DTMoney")
If CDbl(DTopMoney)>CDbl(DTMoney) Then
set Temprs=nothing
set Temprs=server.CreateObject("adodb.recordset")
sql=""
sql="update HyMoneyAccount set DTMoney=DTMoney+3 where HyNumber='"&HyNumberee&"'"
Temprs.Open sql,conn
set Temprs=Nothing
End If
End If
Rs1.movenext
Wend
End If
------解决方案--------------------
楼主,你这种不慢才怪,几W多条记录要循环,循环体内又连接数据库
其实你这种要求只要一条SQL就够了
- SQL code
update ma set DTMoney=DTMoney+3 from HyMoneyAccount ma inner join HyClub c on ma.HyNumber=c.hynumber where c.HyTopMoney>ma.DTMoney
------解决方案--------------------
一般处理慢的原因很多,一方面是sql语句写的不恰当,像ls说的,一方面很多时间花费在连接数据库以及数据往返操作上,可以通过建立存储过程(在存储过程中进行批处理)减少与数据库连接的次数
------解决方案--------------------
同意一楼,既然是所有符合条件的同时+3分,那就没必要循环再一条一条判断了,直接将符合条件的所有记录同时更新不就好
------解决方案--------------------
同意一楼。频繁链接数据库,会很慢的。