日期:2014-05-17  浏览次数:20886 次

大伙帮我看看,如何提高执行效率
碰到一问题,大伙帮我看看,能不能优化一下,删除几万条数据要等很久,而且CPU占用率达100%,源代码如:(注:asp程序,access数据库)
<%
Server.ScriptTimeOut=60000
sql= "select   *   from     products     order   by   pro_id   desc "     '所有产品
Set   rs   =   Server.CreateObject( "ADODB.Recordset ")
rs.open   sql,conn,1,3  

if   not(rs.bof   and   rs.eof)   then '判断是否有产品信息
do   while   not   rs.eof '如果不是最后一个产品,侧执行下面操作

if   rs( "AgentID ") <> " "then   '判断代理商ID号是否存在
sqltime= "select   *   from     TimesInfo     where   AgentID= "&rs( "AgentID ") '根据代理商ID号查询代理商产品价格最新更新时间
Set   rstime   =   Server.CreateObject( "ADODB.Recordset ")
rstime.open   sqltime,conn,1,3  
aaa=rstime( "NewsTimes ")
bbb=rstime( "BeforeTimes ")
aaa=cdate(year(aaa)& "- "&month(aaa)& "- "&day(aaa))
bbb=cdate(year(bbb)& "- "&month(bbb)& "- "&day(bbb))
'因为价格表中同一产品有很多价格,现只保留最新的的两个时间价格,其余全部删除
sqldelete= "delete     from     offer     where         pro_id= "&rs( "pro_id ")& "     and   idate   not   in   (# "&aaa& "#     ,# "&bbb& "#) "
Set   rsdel   =   Server.CreateObject( "ADODB.Recordset ")
rsdel.open   sqldelete,conn,1,3       '执行删除操作

rs.movenext       '将光标移动到下一个产品

rstime.close
set   rstime=nothing
'关闭rstime对像
end   if  

'rsdel.close
set   rsdel=nothing         '关闭rsdel对像

loop    

rs.close
set   rs=nothing

response.Write "删除成功 "
end   if


%>

------解决方案--------------------

1.一个页面就创建两个ADODB.Recordset是很耗费资源的

2.删除记录建议使用 Connection 对象



------解决方案--------------------
这里你为什么每次拿到的更新数据要增加进去呢
直接UPDATA就好了
那样每次一样产品都只有两个价格
那不就可以了,不用删除了

增加了数据再删除多余的数据
多操作了

不过如果一定要删除的话,那把set aa = RS( "filename ") 设置一个变量
------解决方案--------------------
要是一定要作删除,插入这样的动作的话,效率肯定要有问题,删除问题不大,很快的,插入可就慢了,不过可以这样,把删除的条件先连起来成一个长的where 串,一次性提交上去
插入的语句用chr(10)分隔开,也一块提交上去,省掉网间多次交互,效率会提高