如何避免对分页计数和数据检索进行多次查询?

时间:2012-05-03 10:04:25

标签: sql database pagination

我有一个场景,我得到一个计数,然后将计数作为变量传递给类似的查询以获取分页记录。所以基本上我正在做一个完整的查询,通过内部创建完整的表来获取所有计数,然后使用该计数显示每页10个相同的表。我有什么解决方案来避免这种多重查询?

这样的东西是伪语言。

select count {big table}

select big table where records are between count and count+10

是否有一种合理的方法可以在同一个查询中获取COUNT变量?

我想知道谷歌将如何处理搜索,是首先找到所有记录还是只是在不跟踪no:of pages的情况下获取记录?页码不能先计算,因为它取决于用户发送的变量。

编辑:我在这里有一个类似的问题https://dba.stackexchange.com/questions/161586/including-count-of-a-result-in-the-main-query

1 个答案:

答案 0 :(得分:3)

对于Google,他们可能只生成请求的结果数量(如10)并估算计数。估计的数量非常不精确。

您无法让SQL Server统计所有结果并只获取其中的一部分。有3种策略可以解决这个问题:

  • 执行计数和数据查询
  • 执行无限数据查询并丢弃客户端上除十个结果外的所有结果
  • 执行无限数据查询到临时表,其主键是行号。然后,您可以立即计算(获取最后一行)并通过单个搜索
  • 选择rownumber的任何子集

计算数据可能会大大降低,因为SQL Server可以使用不同的索引或丢弃连接。