c#上百万数据怎样分页查询提高效率,怎么做索引表

 我来答
huanglenzhi
2016-01-22 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  默认分页 – 只需选中 Web 数据控件的智能标记中的 Enable Paging 选项就可以实现;然而,每次查看页面数据,即使只需在页面中显示部分数据 ,ObjectDataSource 也会读取所有记录。
  自定义分页 – 仅从数据库中获取用户要求浏览的数据页面需要显示的记录,从而提升了分页的性能;然而与默认分页相比,实现自定义分页需要更多操作。
  由于实现方式简单(只需选中一个复选框就可以了!),因此默认分页是一个吸引人的可选方案。但它每次都获取所有记录,当需要对大量数据进行分页时或对于拥有众多并发用户的网站,该方法并不适用。在这样的情况下,我们必须采用自定义分页来提供响应程度更高的系统。
  自定义分页的难点是编写一个查询语句,以便精确地返回某一特定数据页面所需的记录。幸运的是, Microsoft SQL Server 2005 为结果排序提供了新的关键字,它可以帮助我们写出有效读取所需记录的查询。在本教程中,我们将了解怎样使用新的 SQL Server 2005 关键字在 GridView 控件中实现自定义分页。自定义分页与默认分页的用户界面相同,但在从一个页面转到另一个页面时,使用自定义分页的速度可能比使用默认分页快上几个数量级。
  注意: 自定义分页带来的确切的性能提升取决于需要分页的记录总量以及数据库服务器的负载。到本教程结束时,我们会看到一些粗略的统计数据,它们展示了通过使用自定义分页所带来的性能提升。
  步骤1:了解自定义分页的过程
  对数据进行分页时,在一个页面显示的确切记录取决于所请求的数据页面以及每个页面显示的记录数量。例如,假设我们要对 81 件产品分页,每页显示 10 件产品。浏览首页时,我们希望查看第 1 到第 10 件产品;浏览第二个页面时,我们对第 11 到第 20 件产品感兴趣,依此类推。
  对于需要获取哪些记录以及分页界面如何呈现,有三个相关的变量:
  Start Row Index – 要显示的 数据页面的第一行索引,这个索引值可以通过页面索引乘以每页显示的记录数加1 得到。例如,如果一页显示 10 条记录,那么对第一页(页索引为 0 )来说, Start Row Index 为 0 * 10 + 1 ,即 1 ;对第二页(页索引为 1 )来说, Start Row Index 为 1 * 10 + 1 ,即 11 。
  Maximum Rows – 每页最多显示的记录数。该变量被称为“最大”行数是因为,最后一页返回的记录数可能小于页面大小。例如,对 81 件产品分页时,每页显示 10 条记录,第九页(即最后一页)只含有一条记录。页面显示的记录数不会大于 Maximum Rows 的值。
  Total Record Count – 需要分页的记录总数。确定需要为给定页面获取哪些记录时,不需要该变量,但它会影响到分页界面。例如,当对 81 件产品的数据进行分页时,分页界面知道要在分页 UI 上显示 9 个页码。
  对于默认分页来说,Start Row Index 由页面索引和页面大小的乘积然后再加1 计算而来,而 Maximum Rows 即为页面大小。无论要显示哪个数据页面,默认分页都会从数据库中获取所有记录,每行的索引都已知,因此向 Start Row Index 行跳转变得没有价值了。此外, Total Record Count 也可以轻松获取,它是 DataTable (或任何用于保存数据库结果的对象)中记录的数量。
  给定 Start Row Index 和 Maximum Rows 两个变量后,自定义分页必须仅返回所需的记录,这些记录开始于 Start Row Index ,记录的数量不超过 Maximum Rows 。自定义分页有两个难点:
  我们必须有效地将全部待分页数据中的每一行与一个行索引关联起来,这样才能从指定的 Start Row Index 开始返回需要的记录。
  需要提供待分页的记录总数。
  在后面两个步骤中,我们将探讨应对上述两个难题所需的 SQL 脚本。除了 SQL 脚本之外,我们还需要在 DAL 和 BLL 中完成相应的方法。
  步骤2 :返回待分页的记录总数
  在探讨如何准确获取显示页面所需的记录之前,让我们先看看如何返回待分页记录的总数。我们需要该信息来正确的配置分页用户界面。特定SQL 查询语句返回的记录总数可通过使用 COUNT 合计函数 获得。例如,我们可以使用以下查询语句来确定 Products 表中的记录总数:
  SELECT COUNT(*) FROM Products
  我们在 DAL 中添加一个方法来返回这些信息。这个DAL 方法的名称是TotalNumberOfProducts() ,用于 执行上述 SELECT 语句。
  首先,打开 App_Code/DAL 文件夹 中的 Northwind.xsd Typed DataSet 文件。然后,在设计器中右键单击 ProductsTableAdapter ,并选择 Add Query 。正如我们在前面的教程中所了解到的,我们可以向 DAL 添加一个方法,调用该方法时,它会执行特定的 SQL 语句或存储过程。与前面教程中使用的 TableAdapter 方法一样,这一次我们使用 ad-hoc SQL 语句。

  在下一个屏幕中,我们可以指定创建哪种类型的查询。由于此查询会返回一个数量值(Products 表中记录的总数),因此选择 “SELECT which returns a singe value” 选项。

  指定完使用的查询类型后,下一步是编写查询语句。

  最后,指定方法的名称。如前所述,我们使用 TotalNumberOfProducts 。

  单击 Finish 后,向导将向 DAL 添加 TotalNumberOfProducts 方法。如果 SQL 查询结果为空,DAL 中的数量返回方法则返回空值。但是,不管 DAL 方法是否返回一个空的整数值,COUNT 查询都会返回一个非空值。

  除了 DAL 方法之外,我们还需要在 BLL 中增加一个方法。打开 ProductsBLL 类文件,添加一个 TotalNumberOfProducts 方法,该方法要做的只是调用 DAL 的 TotalNumberOfProducts 方法:
  public int TotalNumberOfProducts()
{
return Adapter.TotalNumberOfProducts().GetValueOrDefault();
}
  DAL 的TotalNumberOfProducts 方法返回一个可为空的整型值,但是,我们已经在 ProductsBLL 类中创建了 TotalNumberOfProducts 方法,所以该方法返回一个标准的整型值。因此,我们需要让 ProductsBLL 类的 TotalNumberOfProducts 方法返回由 DAL 的TotalNumberOfProducts 方法所返回的可为空的整型值部分。调用GetValueOrDefault() 方法会返回可空整型值(如果该值存在的话);如果可空整型值为空,则返回默认整型值 0 。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式