文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Access分页问题

Access分页问题

时间:2011-02-14  来源:miuq

    在Sql Server等支持存储过程的数据库里,分页也许会简单一点,如果是Access,虽然也是“支持”存储过程,想必要用它的“存储过程”来实现分页,会更麻烦。

    在网上搜了一下,找到了一个博客转的一篇文章,里面介绍了四种方案,就我个人而言,已直接忽略了方案一与方案二,感觉它们有点麻烦,方案三与方案四才是我考虑的重点。

    其实我是想直接不劳而获,从两者中选一种为我所用。但文章后面的分析中,对几种方案作了分析对比,但执行时间上没看到方案四的数据,方案四也只是介绍完就没有对比了,莫非要我选用方案三?可是作者也说了“not in”是效率很低的啊~~~

    所以只有自己动手简单测一下了。

数据:150M的Access文件,表中数据记录25000多条,假设一页只显示100条,取三个字段……我选第10页的100条:

方案三语句:

select top 100 ID, 书名, 版次 from Content where ID not in (select top 900 ID from Content order by ID) order by ID

    结果直接给我“没有响应”……程序死了……变换若干次所取的分页,依旧“没有效应”,可能是由于记录总数太大的原因?还是我数据访问类没写好?没深究,直接忽略,因为我更关注方案四的表现。

方案四语句:

select * from (select top 100 * from (select top 1000 ID,书名,版次 from Content order by ID) order by ID desc) order by ID

    0.156秒!开个好头,尝试更大一点的,比如pagesize是1000,然后取第10页~

select * from (select top 1000 * from (select top 10000 ID,书名,版次 from Content order by ID) order by ID desc) order by ID

    0.375秒!

    如果再加大pagesize到5000,速度就明显地慢了一点,不过也是可以接受的范围,至少没有死去~10.703秒了结。

    发现方案四的速度是与pagesize相关的,一次显示的越多,运行的时间就越长,也有可能是循环赋值导致,总体来讲,要达到目前Noter的应用水平,方案四是足够了。

    另外,方案四其实有个小问题要考虑,就是当pagesize*page > 记录总数,就会导致分页结果不准确,会产生偏移。比如说,表中原有8条记录,pagesize是5,我要是想查第2页……

    按正常的思维,显示的结果应该是第2页只显示记录6~8,只有三条记录,但方案四的算法会导致第二页显示记录4~8,一共五条记录。这是由于算法里翻来覆去排序导致的,不过所幸的是一般只是会影响到那种特殊情况的分页结果,而且无伤大雅。或者可以加个记录总数来控制一下,不过那是后期具体做的时候再考虑的问题了,现在就探索到这吧。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载