快速业务通道

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
SQL 1

2

SELECT COUN

返回“ASP.NET 2.0数据教程目录”

如我们在之前的教程里讨论的那样,分页可以通过两种方法来实现:

默 认分页– 你仅仅只用选中data Web control的智能标签的Enable Paging ; 然而,当你浏览页面的时候,虽然你看到的只是一小部分数据,ObjectDataSource 还是会每次都读取所有数据

自定义分页– 通过只从数据库读取用户 需要浏览的那部分数据,提高了性能.显然这种方法需要你做更多的工作.

默认的分页功能非常吸引人,因为你只需要选中一个checkbox就可以完成了.但是 它每次都读取所有的数据,这种方式在大数据量或者并发用户多的情况下就不合适 .在这样的情况下,我们必须通过自定义分页来使系统达到更好的性能.

自 定义分页的一个重点是要写一个返回仅仅需要的数据的查询语句.幸运 的,Microsoft SQL Server 2005 提供了一个新的keyword,通过它我们可以写出读 取需要的数据的查询.在本教程里,我们将学习在GridView里如何使用Microsoft SQL Server 2005 的这个新的keyword来实现自定义分页.自定义分页和默认分页 的界面看起来一样,但是当你从一页转到另一页时,在效率上差了几个数量 级.

注意:自定义分页带来的性能提升程序取决于数据的总量和数据库的负 载.在本教程的最后我们会用数据来说明自定义分页带来的性能方面的好 处.

第一步: 理解自定义分页的过程给数据分页的时候,页面显示的数据取 决于请求的是哪一页和每页显示多少条.比如,想象以下我们给81个product分页, 每页显示10条.当我们浏览第一页时,我们需要的是product 1 到 product 10.当 浏览第二页时,我们需要的是product 11 到 product 20,以次类推.

对于 需要读取什么数据和分页的页面怎么显示,有三个相关的变量:

Start Row Index – 页面里显示数据的第一行的索引; 这个值可以通过页的索引乘每 页显示的记录的条数加1得到. 例如, 如果一页显示10条数据, 那么对第一页来说 (第一页的索引为0), 第一行的索引为0 * 10 + 1, or 1; 对第二页来说(索引为 1), 第一行的索引为1 * 10 + 1,即 11.

Maximum Rows – 每页显示 的最多记录的条数. 之所以称为“maximum” rows 是由于最后一页显 示的数据可能会比page size要小. 比如, 当以每页10条记录来显示81条时, 最后 一页也就是第九页只包含一条记录. 没有页面显示的记录条数会大于Maximum Rows 的值.

Total Record Count – 显示数据的总条数. 不需要知 道页面显示什么数据,但是记录总数会影响到分页. 比如, 如果对81条product记 录分页,每页10条,那么总页数为9.

对默认分页来说,Start Row Index是由 页索引和每页的记录数加1得到,Maximum Rows 就是每页的记录数.使用默认分页 时,不管是呈现哪页的数据,都是要读取全部的数据,所有每行的索引都是已知的, 这样获取Start Row Index变的没有价值.而且,记录的总条数是可以通过 DataTable的总条数来获取的.

自定义分页只返回从Start Row Index 开始 的Maximum Rows条记录.在这里有两个要注意的地方:

我们必须把整个要分 页的数据和一个row index关联起来,这样才能从指定的Start Row Index 开始返 回需要的数据.

我们需要提供用来分页的数据的总条数.

在后面的 两步里我们将写出和上面两点相关的SQL.除此之外,我们还将在DAL和BLL里完成 相应的方法.

第二步: 返回需要分页的记录的总条数在我们学习如何返回 显示页面需要的数据之前,我们先来看看怎么获取数据的总条数.因为在配置界面 的时候需要用到这个信息.我们使用SQL的COUNT aggregate function来实现这个. 比如,返回Products表的总记录条数,我们可以用如下的语句:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号