优化分页中的SQL语句

平时我们分页时都是一次将全部记录读取到记录集中,再利用RecordSet对象的属性进行分页显示,这样在记录非常多时,占用的资源是非常可观的,以前也考虑过这个问题(见"关于分页的一点思路"),优化思路也正确:只读取需要的记录到记录集中,然而方法都围绕在取得每页头尾的ID上,今天再蓝色论坛上看到了另一个方法,非常简单,只是优化了下SQL语句,如下:
select top pagesize field1,field2 from tab1 where id >(select max(id) from (select top pagesize*(page-1) id from tab1 order by id)) order by id

注意不要写成下面的方式(实测access数据库三千多条数据慢很多):
select top pagesize field1,field2 from tab1 where id >(select max(id) from tab1 where id in(select top pagesize*(page-1) id from tab1 order by id)) order by id

这应该是最简单的方法了。

需要注意的是当取第一页记录时直接用"select top 每页记录数 字段 from 表"就可以了,使用子查询会出错!

在操作过程中还发现top对max是无效的,如"select top 5 max(id) from 表"的结果仍是所有记录中最大的id。

上一篇: 你加Response.Buffer = true了吗?
下一篇: 显示/隐藏菜单
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 1 | 引用: 0 | 查看次数: 4122
发表评论
登录后再发表评论!