【问题标题】:Retrieving results in a faster way以更快的方式检索结果
【发布时间】:2019-09-25 18:52:28
【问题描述】:

我正在尝试获取分页值。我每页需要 20 条记录。所以根据页码,我正在查询如下所述。我希望查询在检索值时花费最少的时间

“page”包含我当前所在的页码值。

Select * FROM Table_A where Name Like lower('see%k%') 
ORDER BY Name OFFSET (page-1)*20 ROWS FETCH NEXT 20 ROWS ONLY

我发现如果我们有很多匹配值,偏移量不好,当我在最后一页时,我们将不得不解析很多值。请建议一些更好的搜索查询。

【问题讨论】:

标签: sql sql-server pagination


【解决方案1】:

您可以按照旧方法进行操作。基于产品中的这些示例。查找第一页:

SELECT TOP(@PageSize) ProductID, Description
FROM dbo.Products 
ORDER BY ProductID;

然后记住最后返回的值,请求下一页:

SELECT TOP(@PageSize) ProductID, Description
FROM dbo.Products 
WHERE ProductID > @LastProductID
ORDER BY ProductID;

然后返回一个页面,记住第一个返回的值,然后是这样的:

SELECT * 
FROM (SELECT TOP(@PageSize) ProductID, Description
      FROM dbo.Products 
      WHERE ProductID < @FirstProductID
      ORDER BY ProductID DESC) AS SelectedProducts
ORDER BY ProductID;

这通常会胜过 OFFSET 和 FETCH NEXT

【讨论】:

  • 感谢您的想法。但是,有时我也可以从第 10 页转到第 2 页。此刻,我可以从一组连续的 10 页中转到任何页面。您提供的此解决方案仅对当前、上一页和下一页有效。
  • 当然,但是你又变慢了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2015-02-16
  • 2016-06-02
  • 2012-02-29
相关资源
最近更新 更多