分页时的偏移量与页码

问题描述 投票:0回答:4

这是非常微不足道的,但我注意到他们使用的是页码而不是偏移量。我知道差异很小(将页码乘以页面上的行数或将偏移量除以页面上的行数),但我想知道是否推荐其中一个。

有些网站,例如谷歌,当然使用更复杂的系统,因为它们需要跟踪您的实际搜索。但我正在考虑一个简单的网站,这并不重要。

推荐的技术是什么?

language-agnostic pagination
4个回答
11
投票

使用偏移量。如果您选择允许每页显示可变(或用户定义)数量的结果,则编码很容易。


9
投票

当您分页的结果集非常大时,偏移量对于优化非常有用。

这是因为在某些情况下它允许您执行

WHERE my_sortorder >= (some offset)
LIMIT 10

而不是

LIMIT 10 OFFSET 880

效率较低。

在第一种情况下,您可以使用索引直接跳转到结果的开头(内部它将是二分搜索)。在第二种情况下,您将在到达所需的行之前获取并丢弃 880 行。如果索引可以满足提取,则不需要加载前 880 行中的所有列,但至少在索引中您仍然检索那么多行。

也就是说,如果您要排序的列可能有重复值,则可能需要创建一个纯粹具有唯一排序值的新列,但如果深入分页到已排序的结果集,那么这种努力是值得的是一个目标。


8
投票

使用

limit
offset
的组合是最好的,因为如果您更改限制,不需要任何进一步的数学计算即可计算出新页码。

例如,每页 20 个对象,假设第 1 页返回索引为 0 - 19 的对象,如果您在第 2 页,那么您应该查看索引为 20 - 39 的对象。如果我现在决定更改我的限制到 10 时,最常见的行为是显示索引为 20 - 29 的对象。

完成上述行为需要您使用新的限制重新计算您应该访问的页面。在上面,如果您将限制更改为 10,但将页码保留为 2,那么您将显示索引为 10 - 19 的对象。您需要将页码重新计算为 3,以便对象 20 - 显示了 29 个。

当然是我的意见。


0
投票

我相信偏移和限制更清晰。

如果我们将某个记录(例如第 10 条)视为页面的开头,则使用偏移量会产生非常直接且易于遵循的逻辑。 offset=10,您可以将限制设置为任何页面大小。

页码取决于页面大小,并且您有 N 种不同的方式来使用该记录开始页面,并且必须将其与页面大小联系起来。 你可以选择pageSize=10&pageNumber=2一直到pageSize=1&pageNumber=10,这不像offset和limit那么明确

© www.soinside.com 2019 - 2024. All rights reserved.