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调试问题