Sql 以更快的方式检索结果

Sql 以更快的方式检索结果,sql,sql-server,pagination,Sql,Sql Server,Pagination,我正在尝试获取分页的值。我需要每个页面20条记录。因此,根据页码,我进行如下所述的查询。我希望查询在检索值时花费的时间最少 页面包含我当前所在的页码值 Select * FROM Table_A where Name Like lower('see%k%') ORDER BY Name OFFSET (page-1)*20 ROWS FETCH NEXT 20 ROWS ONLY 我已经看到偏移量不好,如果我们有很多匹配值,当我在最后一页时,我们将不得不解析很多值。请建议一些更好的搜索查询。

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

页面包含我当前所在的页码值

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

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

你可以用老方法来做。以这些产品的例子为基础。查找第一页:

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好得多

Aaron Bertrand写到了这一点:谢谢你的想法。但是,有时我也可以从第10页转到第2页。在某一时刻,我可以从一组连续的10页转到任何一页。你提供的这个解决方案只对当前页、上一页和下一页有效。当然,但你又回到了慢节奏。