当前位置:编程学习 > asp >>

ASP代码优化

以下代码用于调用MSSQL用户表中的三个字段,并截取前16条记录显示。 其中:“table”为表名,“name”为用户名字段,“hit”和“tou”为两个数值字段。 原代码如下,感觉调用很慢,请高手优化,高分重谢: <!--#include file="conn.asp"--> <% '人气排行调用 dim rs2,sql2 set rs2=server.createobject("adodb.recordset") sql2= "Select * from table order by hit+tou desc" rs2.open sql2,conn,1,1 if err.number <> 0 then response.write "数据调用超时" else response.write "" if rs2.bof and rs2.eof then rs2.close response.write "" response.write "" else dim b response.write "" for b=1 to 16 hit=rs2("hit") tou=rs2("tou") hits=hit+tou %> <table> <tr> <td> <div align="left"> <a href="web.asp?id=<%=rs2("id")%>&name=<%=rs2("name")%>" bname=<%=rs2("name")%> target="_top"><%=rs2("name")%></a> </div> </td> <td> <div align="right"> [<%=hits%>] </div> </td> </tr> </table> <% rs2.movenext if rs2.eof then exit for next rs2.close set rs2=nothing end if response.write "" end if %>
追问:用DO WHILE NOT RS.EOF循环我不会写,能否请你把整段代码优化一下,我采纳答案,如果能达到最优效果,再加分致谢!这个表总共才8个字段,所以我就图省事用*了,谢谢你的指点!
也用过top 16,但取出来的是最新前10条,不是hit+tour的前10条。不知什么地方写错了。
能否先定义:hits=hit+tou,再这样查询:
Select  top 16  from  table  order  by  hits  desc
如果这样查询:
Select  top 16  from  table  order  by  hit+tou  desc
是否就不需要定义hits=hit+tou?谢谢你。对我很有帮助。
楼下的回答同样很好,而且更可贵的是提出了用DO WHILE NOT RS.EOF循环的的建议,我把最佳答案给他了。但还是要真诚地感谢你。
答案:sql语句改为select top 16 id,name,hit,tou from table order by hit+tou desc
下面的循环最好用DO WHILE NOT RS.EOF 
来做,最好不要用B来做,因为这样会进行多重判断,会花费时间的
其他:select top 16 id,name,hit,tou from table order by hit+tou desc
对于字段较多的表,切忌使用select * 需要用到什么字段就取什么字段,
取前16条记录可以加上top 16 这样超过16的数据就不会取出来了。可以节省大量时间。 

上一个:asp.net中split(|)什么意思
下一个:asp.net+iis+win7调试问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,