Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何避免分页计数和数据检索的多次查询?_Sql_Database_Pagination - Fatal编程技术网

Sql 如何避免分页计数和数据检索的多次查询?

Sql 如何避免分页计数和数据检索的多次查询?,sql,database,pagination,Sql,Database,Pagination,我有一个场景,在这个场景中,我获取一个计数,然后将计数作为变量传递给一个类似的查询,以获取分页记录。基本上,我是在做一个完整的查询,通过内部创建完整的表来获取所有的计数,然后使用该计数以每页10的形式显示相同的表。我需要什么解决方案来避免这种多重查询 类似这样的东西是一种伪语言 select count {big table} select big table where records are between count and count+10 是否有一种合理的方法可以在同一个查询中获取

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

类似这样的东西是一种伪语言

select count {big table}

select big table where records are between count and count+10
是否有一种合理的方法可以在同一个查询中获取COUNT变量

我想知道谷歌将如何处理搜索,它会先找到所有的记录,还是只获取记录而不跟踪页数?页码不能预先计算,因为它取决于用户发送的变量


编辑:关于谷歌,我这里有一个类似的问题,他们可能只生成所需数量的结果(如10个),并估计数量。估计的计数非常不精确

您不能让SQL Server计算所有结果并仅获取其中的一个子集。有三种应对策略:

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

由于SQL Server可以使用不同的索引或放弃联接,因此计算数据的成本会显著降低。

这种伪查询没有任何意义。如果
count
保留表中的行数,则count和count+10之间的
将不会返回任何内容。然后,count+1。谢谢count跟踪页码编号:SSo是否引用表中的行数或当前页码?您使用的是什么DBMS?
COUNT
查询在处理方面相对便宜。如果要返回当前页面的页数(记录数除以10)和记录,则需要两个查询-它们是两组不同的数据。您不是“生成完整表”-这意味着您正在插入数据。你不是。您正在检索数据
COUNT
没有检索数据那么昂贵,您只是获取一个表包含多少记录的计数。