大伙帮我看看,如何提高执行效率
碰到一问题,大伙帮我看看,能不能优化一下,删除几万条数据要等很久,而且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)分隔开,也一块提交上去,省掉网间多次交互,效率会提高