网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.讲解SQL Server海量数据导入的最.
.用最简单的步骤备份sql数据库的文.
.配置SQL Server 2000选项.
.生成100万不重复的8位均匀分布的.
.轻松掌握数据库的具体分类及其相.
.启动SQL SERVER时自动执行存储过.
.实现上千万条数据的分页显示.
.如何维护SQL Server的“交易日志.
.ASP调用SQL Server视图和存储过程.
.SQL Server 2005 Reporting Serv.
.利用同义词简化SQL Server 2005开.
.从三个方面进行讲解如何适当优化.
.sql server2000导入mdf文件.
.利用SQL语句对不同数据库进行高效.
.分布式查询和分布式事务.
.放弃连接消息出现在错误日志中的.
.扩展数据库系统选项实现更高的可.
.数据库查询结果的动态排序(2).
.如何使用SQL Server数据库查询累.
.分页存储过程.

SQL分页算法,还可以更好

发表日期:2006-5-30


分页算法,是Web开发人员很关心的一个问题,几乎每个数据库相关的应用都要涉及到分页算法,有很多人写过这方面的文档,似乎没有什么好讨论的了;但实际上换一种数据的表现形式,就可以采用一种更好的分页算法,那我们现在就看看还能不能做得更好。

先说说已有的一些方法。
一是通过 DataGrid 分页,这种方式最简单,但效率不高,需要读取所需数据前面的所有数据。
二是通过指定起始记录和记录数的 DbDataAdapter.Fill 来填充 DataSet 的分页方式,这种方式也简单,但同样效率不高,也需要读取所需数据前面的所有数据。
三是通过多个 select top 和多次排序,从表的中间选取需要的记录;为了使相邻页的数据不重复,需要使用 not in,会导致在选择大数据量的表格的尾部数据时,数据库的性能会有很大的降低。

假设我们换一种表格的展现形式,就以传统的 C/S 应用下的带滚动条的 Grid 展现方式为例;其实这种方式才是数据库表格最合适的展现方式,而 Web 应用下常用的 1,2,3....的页码连接方式或上一页、下一页按钮的页码浏览条方式,都是不得已而为之,因为不能通过简单的技术,在 Web 应用下实现带滚动条的 Grid。

数据库的表格都是带有主键的,以区分表格中不同的记录;用户界面上的 Grid 里的数据从逻辑上也是有主键的,否则数据会有歧义,但大多数的应用,没有设置,也无法知道所读出数据的主键;即使少数应用设置了,也知道所读数据的主键,但并没有将其应用到分页中;其实只要知道了所读数据的主键,就可以非常容易的进行分页。

首页的算法很简单
 select top 页大小 * from 表名 order by 主键

对于带滚动条的表格,数据是一页一页顺序滚动,即使拖动滚动条,也可以一页页滚动到所选的位置,当拖动到一个新页时的算法为
select top 页大小 * from 表名 where 主键 > 上一页末记录的主键 order by 主键

如果采用了缓存的方式,所有的数据都只需要下载一次,只有滚动到尾部时,才下载新的数据。

这种算法要求知道 Grid 中数据的主键,并将主键的数据应用到分页;对于多主键和排序的表格,算法是一样的,只是语句复杂了一些。不但可以从首页开始,也可以从末页开始,向前翻滚。
这个算法的性能没有问题,对于不论多大的表,选择那个位置的记录都是一样的,比较适合于用首页、上一页、下一页和末页的分页选择方式,更适合于带滚动条的 Grid ;不适合于指定页码的分页。

采用该算法的带滚动条的 Grid 可以参考我们的演示 www.BizStruct.cn

请您在提出疑问时,先考虑两点,否则可能认识不到这个算法和我们系统结合的优势:
第一:传统的 C/S 应用的表格和Web上的分页表格,谁更便利。
第一,我们实现的带滚动条的表格,和传统的 C/S 应用的表格的差别有多大。

对回复的解释:
有的回复提出无法实现“跳转到xx页”这样的操作。
可我们想想,在 C/S 的应用环境下,如果谁用这种页面跳转的方式,大家肯定会觉得怪异。
而我们实现的带滚动条的 Grid 在局域网环境下,速度几乎和以前的 C/S 应用差不多,在广域网的情况下,速度也很快。
Web 应用的“跳转到XX页的操作”实际上是不得已而为之,如果能实现 传统的 C/S 应用的Grid,为什么还要用这个呢?

上一篇:SQL Prompt:SQL智能完成工具! 人气:9483
下一篇:数据库连接字符串大全 人气:20864
浏览全部分页算法的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐