【发布时间】:2021-08-19 21:55:36
【问题描述】:
我有一个包含 3000 万条记录的表,我们正在使用 SQL 服务器查询来提取数据。
SELECT FruitName, Price
FROM SampleFruits
ORDER BY Price
OFFSET 5 ROWS FETCH NEXT 20 ROWS ONLY
使用上述偏移量(页面)和获取(行)的方法,我们遇到了性能问题,因为偏移量需要扫描所有记录,直到它导致问题的偏移量。
我正在查看不同的选项,我发现大型数据集的建议是基于光标的分页。基于游标的分页在 SQL 查询中是什么样子的,我们应该在查询本身中包含上一页和下一页以将其发送给消费者,参数是什么样的?
查询如何在结果集中给出 prev 和 next ?
{
Fruits:[
{
name: "Oraange",
shelfLife: "2021-06-15",
weight: "30 Lbs"
},
...
],
nextPage: "?",
previousPage: ?,
totalRecords: ?
}
在 Web API 中,我们在哪里设置查询中的 nextPage 和 previousPage 或在 C# 中的业务层形成它?
获取 totalRecords 是一个单独的查询?
当他们想倒退时,我们是否需要将查询更改为设置上一页、下一页。 SQL server 中基于 Cursor 的分页中的查询基本上是什么样的,以及 nextpage 和 previousPage 在 sql 查询中设置或在 C# 中完成的位置。另外,Web API 的查询参数是什么?
【问题讨论】:
-
似乎评论和答案已经包含所有信息。如果您只需要下一个和上一个(而不是导航到特定页码),只需在下一个上执行“> last id”查询,在上一个导航上执行“
-
我无法相信拥有 3000 万条记录的表,您的用户最多会获取超过 10-20 个页面。如果是这种情况,那么您可能需要考虑一种只检索几百行的方法。
标签: c# sql-server asp.net-web-api pagination