51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> asp.net >> 文章正文

循环语句效率太低如何改进

更新时间:2012-5-3:  来源:51代码网

表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 

几W多条记录要循环,循环体内又连接数据库
其实你这种要求只要一条SQL就够了
update ma set DTMoney=DTMoney+3
    from HyMoneyAccount ma inner join
HyClub c on ma.HyNumber=c.hynumber
where c.HyTopMoney>ma.DTMoney

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |