-1

我正在使用 Struts 2 框架,但这个问题不仅仅是 Struts 2 相关的。

我试图在我的网站上进行某种分页。假设我有一个要在页面上显示的记录列表。该列表有 150 条记录,但我想在每页上显示 50 条,所以在这种情况下将有 3 页。当然,列表将从数据库中获取。

扭曲是我们有一个限制,如果查询花费超过 7 秒,它就会被杀死(不要问)。因此,如果我们同时获得 150 条记录,我们的查询将花费超过 7 秒。所以我们决定每次获取 50 条记录。因此,在这种情况下,我们将访问数据库 3 次(50 50 50)。第一次我们将获取总数(150),所以我们知道我们应该返回数据库多少次。

你们中的一些人可以分享您对如何处理此类事情的想法吗?我知道你们中的一些人可能会说调整存储过程或查询是最好的选择,但这将是一条痛苦的道路,因为我们有大量的 SP 和查询。

我会很感激任何例子。

4

3 回答 3

1

您不需要第一次进行实际获取,您可以仅获取计数(聚合函数查询)。实时分页列表在非常大的数据集中特别常见,唯一的问题是无法保证页面状态。也就是说,记录可能会按顺序插入前一页中,从而将旧记录推送到新页面中,反之亦然。不过,它通常可以接受。

于 2009-04-21T12:15:23.060 回答
0

一个分页查询示例,这样您只能获得有限数量的记录:-

select * from records limit $start,50

在这里,我假设您的原始查询是从记录中选择 *。只需在原始查询中附加“limit $start,50”即可。在这里,当您希望前 50 条记录 start 应该等于 0 时,要获取 50-100 条记录 start 应该等于 50 并且 100-150 条记录 start 应该等于 100。通过将“limit $start,50”附加到任何查询,查询从记录号 $start 开始获取 50 条记录。我希望这能解决您的分页问题。

于 2009-04-21T12:47:22.627 回答
0

您是否只是在寻找有关如何处理分页的一般提示?您认为您应该只从数据库中获取您需要的记录以保持较小的查询,您的想法是正确的。

不同的 RDBMS 有不同的方法来枚举和分页记录。MySQL 有这个LIMIT关键字,MS SQL Server 2005 及以上有这个ROW_NUMBER()功能,Oracle 有一个ROWNUM专门的专栏。根据您的 RDBMS,应该很容易找到使用这些功能的示例。

于 2009-04-21T12:13:23.923 回答