db web pagination

http://user.qzone.qq.com/170475387/blog/86
web pagination
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
1.      假分页
      程序算法分页,数据库里取所有数据,显示有用的部分,写标准SQL语句,通过大量算法实现,对任何数据库都有效。
      缺点:数据全部取出,性能下降
      优点:程序可移植性高
对应任务:只是完成一个最简单的分页à 程序中没有涉及到查询代码
2.      真分页
任何数据库都会提供分页的函数操作:Oracle、DB2、MySQL
程序只取有用的部分,而其他没用的部分是不会被加载到内存中
缺点:特定数据库特有分页sql,可移植性差
优点 :程序的性能高
序言
    分页技术在计算机上应用非常广泛,论硬件,计算机的系统内存中使用了分页技术,利用分页技术将线性地址转换为实际地址。论软件,为了实现虚拟内存, Windows利用了386以上CPU提供的内存分页技术,这些CPU支持把内存分成4KB为单位的一个个“页面”。而今,WEB中引入了数据库技术,大 量的数据处理需要用到分页技术。系统内存、虚拟内存、数据库三者之所以都要用到分页技术,是因为它们有一个共同的特征,即它们的地址或数据的排列都是线性的,需要通过分页技术来标识它们中的某一段或某个地址位置。我还没看过对于分页的定义,但可以知道,分页是用来标识某项事物的地址或位置。
    在数据库中,大量的数据处理通过WEB来输出并传送到客户端,为了减少传输量和更精确地查找数据,很需要用到分页技术。目前分页技术已经广泛应用到互联网页的每个角落,包括搜索引擎、 BBS、网上黄页、电子商务及其它相关的拥有一定信息量的各项应用邻域。分页技术在目前已经成了WEB开发不可缺少的一部分。此文也仅限讨论WEB开发中 与数据库相关的分页技术。
(一)
数据库的大小
目 前的动态网站一般都需要数据库的支持,根据数据量(记录数)的多少,可以分为微型数据库(1万以内),小型数据库(10万以内),中型数据库(100万以 内),大型数据库(大于100万)不等。分页技术的一个重要作用就是为了提高服务器端的运行效率(其实也就是速度),如果在采用的分页技术没能达到提高效率的目的,是需要改善分页方式的时候了。
首先我们需要介绍一番分页的一些常用功能:
翻页功能
第一页: 查看所有符合条件的数据的第一页数据
上一页: 查看相对于当前数据库所在页的上一页数据
下一页: 查看相对于当前数据库所在页的下一页数据
最后一页: 查看所有符合条件的数据的最后一页数据
转到指定页: 查看所有符合条件的数据的指定页数据
统计功能及标定位置功能
统计总符合记录数、页数,标识当前查看的记录是第几条到第几条,在第几页。
几种常用的分页方式
1.包括上述的所有分页技术的功能,一般此类数据库的记录数都比较少
2.只有第一页,上一页,下一页,最后一页的翻页功能,其它的可能会有总符合记录数,页数的统计,此类数据库一般都比较大
3.仅有第一页和下一页,或仅有上一页和最后一页。这类数据库应该是趋向于大型,并尽量只用一句SQL语句查询来减少数据库的执行时间,可以加上总记录数及页数的统计。
4.仅返前面N条符合条件的记录,并可以使用所有的翻页功能,总符合记录数及页数只能作估计处理。一般来说,搜索引擎采用的都是这种方式。
上页的第二、三种分页方式不能采用标识当前查看的记录是第几条到第几条,在第几页的功能,似乎不符合原先所述的分页定义,其实,分页需要有一个位置标识才能完成分页,即在数据库中要有相应的可以跟踪的字段。只不过它们一次只能标识一个节点,达不到页面之间的任意转换查看。
功能直接影响着分页的速度, 当然,如果数据库越是大型,影响会越明显和严重。下面是各种数据库的建议拥有功能:
微型数据型: 由于数据量比较少,所受的速度影响也最小,为了网站访问方便,建议将所有功能都用上。
小型数据库: 建议采用第二种分页方式,这样网站会比较稳定,比如一些访问量很高的BBS,比如新浪的论坛。
中型数据库: 可以采用第二种或第三种方式,如果觉得用第二种方法速度嫌慢,建议采用第三种方式。
大型数据库: 如果需要遍历所有的数据,建议采用第三种方式,如果仅需返回前面的一部分数据,建议采用第四种。
(二)
分页的执行效率如何才能称得上高效率?
我们将一次性完成所有的分页功能叫完成一次分页,无论怎么多的数据,完成一次分页的执行时间不应该超过100毫秒,即0.1秒。如果总是大于200秒毫,我想你应该换种分页方式了,并减少一些分页中的功能。时间就是生命,在程序中亦是如此。
一 般数据库的WEB分页通过一些脚本语句(包括CGI)来实现,比如ASP,PHP和JSP等等,数据库的执行效率直接影响着系统的稳定性和访问承受能力。 20%的代码占用了80%的执行时间已经是编程中的经典词句,在分页的实际应用中我们还应该不断地测试所运行的各种代码,找出程序中消耗时间瓶颈,将会使你写出来的程序更加的稳定和专业。

SELECT TOP 页大小 * FROM Users WHERE
            (ID NOT IN (SELECT TOP (页大小*(页数-1)) ID FROM Users ORDER BY ID DESC))
                    ORDER BY ID DESC
注:页大小指的是每页显示的条数,粗体部分是需要用程序运算后的一个数字。页数:表示第几页,从1开始
a 别名
user_id 主键
user_code 建立索引
建立索引排序,则减小sql时间消耗成本

查询分页:
select top 3 * from "user" a where a.user_id not in
       (select top 6 uer_id from "user" order by user_code)
         order by user_code
查询总数:
select count user_id from user


end

posted @ 2008-10-22 21:23  siemens800  阅读(10)  评论(0编辑  收藏  举报