打印

[asp] asp 超强分页类 比传统分页提高速度100倍

not in() no good!
good is ?
www.aoaob.com
引用:
原帖由 aoaob 于 2007-9-10 09:39 发表

你用百万条记录测试了吗?我测试了。老毛说的,没有调查就没有发言权。我所说的100倍,是至少有20000条记录的情况下,和最传统的asp分页方法的比较。或许你有更好的方法,那就不是100倍了,或许是1000倍。我只 ...
说到调查,豪不夸张讲,06年前ASP网上各种出色的分页方法都没逃过我的解剖和实测,而且全部实打实的百万记录。你这2万条,还是mini型,你复制到百万再看看还有几倍,呵呵。
感觉讨论在access下实现百万级的分页是浪费时间,真到了这个级别应该是使用mssql、存储过程分页

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
不想说什么,因为没有什么意思

我曾经花了半天时间用百W条记录测试过四种分类代码性能

不知楼主是否有测试过?

TOP

借助专门的压力测试软件
加大测试力度在看看结果怎么样

好像in还不如>/<这类的快
曾经沧海难为水,除却巫山不是云.

TOP

我以前也写过,现在我都用JS来分页了,取数据用储存过程,没有你的效率高吗?

TOP

首先,你用了 not in ,效率低 和 select *,(我用存储过程的 id>**)
再次,你用了Request来保持参数,我用JS来获取参数,我的在服务器端执行的代码,只有取数据和得到记录总数,别的都在客户端完成的,敢问效率如何?

大数据没有测试,只测试过18W数据的,效果很不错。

TOP

付上自己写的保持参数的JS

<script>
function getQuery(newvalue,pagePara)
{
       //get the querystring
       var querystring=location.search;
       var new_querystring="?";
       querystring=querystring.substr(1,querystring.length-1);//alert(querystring);
       if(querystring.length>0)
       {
              var arr=querystring.split("&");
              for(var i=0;i<arr.length;i++)
              {
                     var str_temp=arr[i];
                     var arr_temp=str_temp.split("=");//split with "="
                     var para=arr_temp[0];//para name
                     var para_value=arr_temp[1];//para value
                     if(para.toLowerCase()!=pagePara)
                     {       
                            //maintain the other paras
                            if(new_querystring=="?")
                                   new_querystring += arr[i];
                            else
                                   new_querystring += "&" + arr[i];
                     }
              }
              //add the new para-value to the url
              if(new_querystring=="?")
                     new_querystring += pagePara + "=" + newvalue;
              else
                     new_querystring += "&" + pagePara + "=" + newvalue;
       }
       else
       {
              //there is no params in the url
              new_querystring += pagePara + "=" + newvalue;
       }       
       //alert(new_querystring);
       return new_querystring;
}
function GoPage(pageno,page_input_name,pagePara)
{
if(!pageno)
       location.href=getQuery(document.getElementById(page_input_name).value,pagePara);
else
       location.href=getQuery(pageno,pagePara);
}
</script>

TOP

楼主的测试页给的可真够……
测试页只是测试程序速度的,尽量不要不网速问题搞得太有影响,去掉JS和图片吧。那样才不至于网速影响。
乐于助人、严格管理、言多必失。无知者无罪。Keep your waiting,I am come back.
编程资源:http://book.kuhanzhu.com
对管理有异议,请前往事物区进行投诉。请勿PM。

TOP

引用:
原帖由 omeweb 于 2007-9-11 10:31 发表
首先,你用了 not in ,效率低 和 select *,(我用存储过程的 id>**)
再次,你用了Request来保持参数,我用JS来获取参数,我的在服务器端执行的代码,只有取数据和得到记录总数,别的都在客户端完成的,敢问效 ...
id>** 这里id是唯一的 那要按 点击次数排序呢?
点击次数可能重复的。应用面太小
www.aoaob.com

TOP

难道NOT IN就可以了?
阿梁

TOP

Set Rs = Server.CreateObject("Adodb.RecordSet")
not in

有上面这2个东西,效率只有3个字:非常低!!!!

ps:笔误。。纠正下,应该是rs.RecordSet 和 not in,LZ有not in。

[ 本帖最后由 WellFrog 于 2007-9-13 16:52 编辑 ]

TOP

再小小打击下LZ(并不是恶意讽刺,只是希望LZ多学习别人的分页)

可惜不能贴图,我把代码和结果直接贴出来好了
100W数据库,Access
用你的代码
引用:
startime=timer()

Dim Pl '定义变量,任意定义
Set Pl =  New AoaobPage '建立类的实例
Pl.pagesize = 25 '每页显示个数
Pl.SetPageTag = "id" '这是所有数据不会重复的数据库字段,一般为主键
Pl.getconn = Conn '这是数据库链接对象,根据自己的情况定义。
Pl.getsql = "select * from table1 order by id desc"
set Rs = Pl.getrs()'返回分页数据集
For i=1 to 25
If Rs.Eof Then Exit For
Response.Write(rs("id")&"<br>")
rs.movenext
Next
set Pl = Nothing

endtime=timer()%>

本页面执行时间:<%=FormatNumber((endtime-startime)*1000,3)%>毫秒
显示的结果
引用:
1000000
999999
999998
999997
999996
999995
999994
999993
999992
999991
999990
999989
999988
999987
999986
999985
999984
999983
999982
999981
999980
999979
999978
999977
999976
本页面执行时间:18,105.470毫秒
大概18秒左右

TOP

看来大家都很有兴趣,打击我的人请说出改良方法!ok 知道不好,还不知道更好的,那就只能用知道的最好的乐,
www.aoaob.com

TOP

改良。。换个核心吧

[ 本帖最后由 WellFrog 于 2007-9-18 11:42 编辑 ]

TOP

叶子版分页速度很快。。可惜不支持参数化查询。
如果谁有能不能提供一下。

TOP

唉,和我们SQL的存储过程分页是一个原理啊,就是用先排序,再判断查询记录区间的二重查询而已,只是在asp下只能拼凑SQL语句而已............

TOP

不是最好的不一定不好!
www.aoaob.com

TOP

这个方法在04年的时候在经典上就发过了!经过后来几个同行业的朋友论证后,最终还是放弃了这种方法!
这是当年的地址:
http://bbs.blueidea.com/thread-1331018-1-1.html

楼主的心是好的!~把自己的心得与大家分享!~但标题请勿如此书写!给人感觉印像不好

这个方法最大的弊端就在于!需要两次select!当百万级量(不需要百万,上万就行了)!真正的资源消耗啊!

所以轻量级的access分页我还是选用的传统的ado提供给我们的分页方法!而mssql,自然就用分页存储过程了!因为是编译过的,效率自然不必说了
没有了!不干了

TOP

速度很快!
不过不支持多个表

[ 本帖最后由 heesey 于 2008-5-12 12:04 编辑 ]

TOP