咔伊哇直播app-mov22.com

google seo -> telegram: @ehseo6

">Newsnet 2022-10-02 15:03
  • home  >   /绵阳绿奔集团有限责任公司  >   咔伊哇直播app
  • 香港开奖现场直播app下载 bt种子av网站
    西非荔枝果的种子 网种子搜索神器
    红花槐种子 how about 咔伊哇直播app?
    What's the 咔伊哇直播app phone number? What is 咔伊哇直播app contact information ?
    Online consultation 咔伊哇直播app The picture of the 咔伊哇直播app
    咔伊哇直播appof the video Is 咔伊哇直播app for real ?
    咔伊哇直播app's website A map of 咔伊哇直播app
    咔伊哇直播app of tiktok 咔伊哇直播appmusic
    咔伊哇直播app of news 咔伊哇直播appapp
    咔伊哇直播appcompany Customer service of 咔伊哇直播app company

    火龙果种子能种吗『网址:ff00.co』F2F4Y5L8-   U  铮?R  P

    哈密瓜种子什么时候种『网址:ff00.co』F2F4Y5L8- 铮?铮?U   E   W

    番茄西红柿种子『网址:ff00.co』F2F4Y5L8-   B   Q   C

    致力于互联网产业的发展

    « 分享一下分期手续费如何折算成年利率在ASP中改善动态分页的性能 »

    ASP的高效率的分页算法

     一般习惯使用的有两种分页算法,一是传统的ADO分页,二是SELECT TOP分页算法。对于小型数据表,比如一两万的数据量的表,我倾向使用ADO算法,对于大型的数据表,则必须采用后者的算法了。

        先来说说传统的ADO分页算法。

        这种算法,使用起来简单容易,很容易上手,对于小心数据库来说是首选,其执行效率很高,数据库自带的游标功能进行翻页的时候也很方便。

        其通常使用的代码如下:
    <%
    dim recordcountnum,page,i,j
    listnum = "30"  '每页显示记录数
    sql="select id,title,time from table1 order by time desc"
    Set rs = Server.CreateObject ("ADODB.Recordset")
    rs.Open sql,conn,1,1
    If rs.eof and rs.bof Then 
    Else
    recordcountnum=Rs.recordcount
    Rs.pagesize = listnum  
    page = Request("page")
    If  page = "" or page < 1 Then
    page=1
    End If
    If (page-Rs.pagecount) > 0 Then
    page=Rs.pagecount
    End If
    Rs.absolutepage=page
    j=rs.recordcount
    j=j-(page-1)*listnum
    i=0
    Do While Not rs.Eof and i<listnum
    response.write "每条记录信息:"&rs("id")&"<br>"
    i=i+1
    rs.movenext
    loop
    ''翻页代码略……
    %>

        这种ADO游标的分页算法,由于每次加载页面都要重新读取数据表的全部数据,虽然游标的使用非常简单,当数据表容量不大的情况下,也是可以使用的;但当数据量非常大的情况下,使用这种分页方法的效率无疑是极低的。

         所以,我们需要引入另外一种高效的SELECT TOP分页算法。代码如下:


    <%
    '每页的记录数
    dim pagesize
    pagesize= "30"

    '读出总记录数,总页数,作者注
    Dim TotalRecords,TotalPages
    SQLstr="Select count(id) As RecordSum From table1" 
    Set Rs=conn.Execute(SQLstr,0,1) 
    TotalRecords=Rs("RecordSum") 
    if Int(TotalRecords/pagesize)=TotalRecords/pagesize then
    TotalPages=TotalRecords/pagesize
    else
    TotalPages=Int(TotalRecords/pagesize)+1
    end if
    Rs.Close 
    Set Rs=Nothing

    '当前页码,作者注
    dim page
    page=Request("page")
    if isnumeric(page)=false then
    response.write "<SCRIPT language=JavaScript>alert('参数错误!');"
    response.write "window.close();</SCRIPT>"
    response.end
    end if
    If page="" or page<1 Then page=1
    If page-TotalPages>0 Then page=TotalPages
    page=int(page)

    if page=1 then
    sql="select top "&pagesize&" id,title,time from table1 order by time desc"
    else
    sql="select top "&pagesize&" id,title,time from table1 where time<(SELECT Min(time) FROM (SELECT TOP "&pagesize*(page-1)&" time FROM table1 ORDER BY time desc) AS T) order by time desc"
    end if
    Set rs = Server.CreateObject ("ADODB.Recordset")
    rs.Open sql,conn,1,1
    Do While Not rs.Eof
    response.write "每条记录信息:"&rs("id")&"<br>"
    rs.movenext
    loop
    rs.close
    set rs=nothing
    ''翻页代码省略……
    %>

        这是一种非常高效的分页算法。当数据表中的数据量成百上千万的时候,上面的这种分页算法的响应时间是非常短的,通常在几十毫秒之内。原理很简单,就是每次分页,我只取需要的几十条记录而已,使用SELECT TOP也正是基于这样的考虑。

        上面的两个分页算法的例子中,flymorn都使用了时间字段time来进行order by排序,因为在我接触的绝大多数系统中,我们都需要把用户最近更新(包括新添加的记录以及新修改过的老记录)的内容展示在前面,如果仅仅使用自动编号的ID作为排序字段的话,用户编辑过的老信息将无法展示在前面。这就是flymorn使用时间字段的原因了。

        这里又涉及到聚合索引的问题了。默认情况下,我们是以自动编号ID作为主键,并且用作聚合索引列,如果上面的算法中,使用这样的ID列来排序的话,效率会更高,数据库响应的时间会更少;然而,我提到了最近更新的内容需要展示在前面的问题,所以,我们必须使用时间字段来排序。因此,为了更高的分页效率,我们可以在数据库设计的时候,把这个时间字段设计为聚合索引列。

        通过这样的设计后,整个分页效率就会得到非常高的提高了。

        然而,把这个时间字段作为聚合索引列,存在又一个小问题。因为数据表在排列数据的时候,是按照聚合索引列来进行物理排序的,当用户添加数据的时候,没有什么问题,在数据表的末尾添加就行了;当用户编辑信息的时候,数据库需要根据这个聚合索引列,把刚编辑过的信息也提到表的末尾,这里就需要耗费一定的时间了。就是说,当我们以时间字段为聚合索引列的时候,我们就需要在 UPDATE 数据的时候多耗费一点的时间。

        然而,综合比较而言,作者认为,SELECT TOP的高效分页算法的关键是要避免全表扫描,尽量只获取需要的字段,排序的字段最好是聚合索引列,实践表明,以聚合索引列来排序的SQL语句的响应时间是最快的。这样处理之后,对于SQL SERVER数据库来说,即使上千万的数据量,也不用怕分页算法失去响应了。

        上面是以 ASP 语言为例写的算法,当然同样可以改造成其他的如ASP.NET,PHP语言所使用。为了更好的使用这样的分页代码,大家也可以把上面的算法改写成存储过程。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    日历

    最新评论及回复

    最近发表

    Copyright 2010-2022 25230.NET All Rights Reserved.

    欧阳霄大乐透前区绝杀号定胆 福建快三号码预测 中福快三软件计划手机版下载 宁夏体彩十一选五玩法 今日大乐透预测下一期双色球开奖结果
    福彩图纸 k8彩和那个彩票平台开奖是一样的 2017154采民乐双色球图表 唯彩会彩票官网首页 超级大乐透17151结果
    快三有没有预测软件 大乐透一百走势图 福彩大地主杀码040 河北快三500彩票 天津福彩快三开奖结果直播现场
    时彩五星计划软件手机版下载 骰宝快三技巧 201750双色球预测 大乐透20147期预测 福彩3b三天计划