|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。一种高效的SELECTTOP分页算法。代码以下:
<%
每页的纪录数
dimpagesize
pagesize="30"<p>读出总纪录数,总页数,飘易注
DimTotalRecords,TotalPages
SQLstr="Selectcount(id)AsRecordSumFromtable1"
SetRs=conn.Execute(SQLstr,0,1)
TotalRecords=Rs("RecordSum")
ifInt(TotalRecords/pagesize)=TotalRecords/pagesizethen
TotalPages=TotalRecords/pagesize
else
TotalPages=Int(TotalRecords/pagesize)+1
endif
Rs.Close
SetRs=Nothing<p>以后页码,飘易注
dimpage
page=Request("page")
ifisnumeric(page)=falsethen
response.write"<SCRIPTlanguage=JavaScript>alert(参数毛病!);"
response.write"window.close();</SCRIPT>"
response.end
endif
Ifpage=""orpage<1Thenpage=1
Ifpage-TotalPages>0Thenpage=TotalPages
page=int(page)<p>ifpage=1then
sql="selecttop"&pagesize&"id,title,timefromtable1orderbytimedesc"
else
sql="selecttop"&pagesize&"id,title,timefromtable1wheretime<(SELECTMin(time)FROM(SELECTTOP"&pagesize*(page-1)&"timeFROMtable1ORDERBYtimedesc)AST)orderbytimedesc"
endif
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensql,conn,1,1
DoWhileNotrs.Eof
response.write"每笔记录信息:"&rs("id")&"<br>"
rs.movenext
loop
rs.close
setrs=nothing
翻页代码省略……
%><p>这是一种十分高效的分页算法。当数据表中的数据量成百上万万的时分,下面的这类分页算法的呼应工夫长短常短的,一般在几十毫秒以内。道理很复杂,就是每次分页,我只取必要的几十笔记录罢了,利用SELECTTOP也恰是基于如许的思索。<p>下面的两个分页算法的例子中,flymorn都利用了工夫字段time来举行orderby排序,由于在我打仗的尽年夜多半体系中,我们都必要把用户比来更新(包含新增加的纪录和新修正过的老纪录)的内容展现在后面,假如仅仅利用主动编号的ID作为排序字段的话,用户编纂过的老信息将没法展现在后面。这就是flymorn利用工夫字段的缘故原由了。<p>这里又触及到聚合索引的成绩了。默许情形下,我们是以主动编号ID作为主键,而且用作聚合索引列,假如下面的算法中,利用如许的ID列来排序的话,效力会更高,数据库呼应的工夫会更少;但是,我提到了比来更新的内容必要展现在后面的成绩,以是,我们必需利用工夫字段来排序。因而,为了更高的分页效力,我们能够在数据库计划的时分,把这个工夫字段计划为聚合索引列。<p>经由过程如许的计划后,全部分页效力就会失掉十分高的进步了。<p>但是,把这个工夫字段作为聚合索引列,存在又一个小成绩。由于数据表在分列数据的时分,是依照聚合索引列来举行物理排序的,当用户增加数据的时分,没有甚么成绩,在数据表的开端增加就好了;当用户编纂信息的时分,数据库必要依据这个聚合索引列,把刚编纂过的信息也提到表的开端,这里就必要泯灭必定的工夫了。就是说,当我们以工夫字段为聚合索引列的时分,我们就必要在UPDATE数据的时分多泯灭一点的工夫。<p>但是,综合对照而言,飘易以为,SELECTTOP的高效分页算法的关头是要制止全表扫描,只管只猎取必要的字段,排序的字段最好是聚合索引列,理论标明,以聚合索引列来排序的SQL语句的呼应工夫是最快的。如许处置以后,关于SQLSERVER数据库来讲,即便上万万的数据量,也不必怕分页算法得到呼应了。<p>下面是以ASP言语为例写的算法,固然一样能够改革成其他的如ASP.NET,PHP言语所利用。为了更好的利用如许的分页代码,人人也能够把下面的算法改写成存储历程。<p>最初,留一个小成绩:SELECTTOP分页的时分,当翻页到最初的时分,假如排序字段列不是聚合索引列的时分,程序的呼应工夫会怎样呢?
ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。ApacheASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。 |
|