分页方法

来源:互联网 发布:spring 源码分析 编辑:程序博客网 时间:2024/04/29 21:29
 

在做查询统计时,如果遇到数据量很大的情况,往往需要采用分页的方式来显示数据。分页的方法主要有三种方式。

一、使用控件属性,比如.net中的GridView就有个AllowPaging,我们只需设为true就能提供分页显示这个方法用起来简单,但是分页效率很低其原理是系统把所有符合条件的数据都读入内存,控件选择某一页的数据显示在页面不说也明白,这个方法只适合数据量很小的系统,数据越多,系统的效率越低

二、写具有分页功能sql语句,在我们查询数据写sql时,把相应的分页参数包含在sql语句中。这个方法稍微有点复杂,但是相对第一种方法效率高多了。下面简单列举三种常用数据库的分页SQL语句的写法。

      1sqlserver 查询第NM条记录

       sql2000

select top M * from T where id not in (select top N id from T order by ID desc) ORDER BY ID DESC ---T是表名,ID是主键 排序字段可以换。

sql2005 select * from (select *, row_number() over (order by id) as row )  from T where row  between N and M ---T是表名,ID是主键 排序字段可以换。

      2 oracle 查询第NM条记录

   SELECT * FROM (SELECT A.*, ROWNUM RN FROM T A WHERE ROWNUM <= M) WHERE RN >= N   ----T是表名

      3 mysql  查询第NM条记录

       SELECT * FROM T LIMIT N,M-N   ----T是表名

       T不仅可以是表,还可以是视图或者查询的sql语句,不管用什么语言做开发,.net也好java也好,在写个方法供调用,即可完成简单的分页查询,实现起来还是蛮简单的。也不需要写存储过程,一个方法在整个系统里几乎都能用上。

写存储过程,在我们查询时,通过分页参数,调用存储过程,取得我们所需要的数据。这样大大的提高查询效率。不同的数据库都可以写相应通用的分页存储过程

在我的blog就有个sqlserver的,适用于sql2000sql2005  http://blog.csdn.net/kongxiangli/archive/2007/05/11/1604169.aspx

mysqloracle的分页存储过程有兴趣可以自己研究。

另外一点就是单纯的分页控件与分页效率是没有关系的。网上有很多的写得很好的分页控件,而且大多还带有原码。有兴趣的自己可以研究。

最后说明一点,文章在细节上不一定完善。