Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
Python Django:count()的替代方案_Python_Mysql_Django_Pagination - Fatal编程技术网

Python Django:count()的替代方案

Python Django:count()的替代方案,python,mysql,django,pagination,Python,Mysql,Django,Pagination,我有一个Django应用程序,可以显示分页的搜索结果。每个页面显示20个结果,我在底部有一个分页条,显示小于当前页面的5页和大于当前页面的5页(如谷歌)。问题是,对于分页栏,我调用count()来获取结果的总数,这样我就知道在当前页面之前是否有5页的结果 问题是,更一般的查询可能需要大约10秒钟才能对执行count()。实际上,我并不关心确切的数字,因为我的大多数用户可能永远都不会看到结果的末尾。有没有办法估计count的输出,或者更一般地说,估计查询返回结果的数量 这是我当前的查询,以获取实际

我有一个Django应用程序,可以显示分页的搜索结果。每个页面显示20个结果,我在底部有一个分页条,显示小于当前页面的5页和大于当前页面的5页(如谷歌)。问题是,对于分页栏,我调用count()来获取结果的总数,这样我就知道在当前页面之前是否有5页的结果

问题是,更一般的查询可能需要大约10秒钟才能对执行
count()
。实际上,我并不关心确切的数字,因为我的大多数用户可能永远都不会看到结果的末尾。有没有办法估计count的输出,或者更一般地说,估计查询返回结果的数量

这是我当前的查询,以获取实际结果

results = Item.objects.filter(title__icontains=query).order_by('views')[offset:limit]

偏移量
限制
变量指当前页面上显示的结果段。我能看到的解决问题的唯一方法是提前5页的结果段并检查它是否为空。然而,该解决方案有很多边缘情况,如果有更简单的解决方案,我真的不想花一天的时间编写这些代码。

也不是理想的解决方案,但可能值得针对您的特定情况进行测试。在以下帮助下,您可以为进行查询的函数引入超时:

。。。或类似的解决方案。您要么需要精确的行数,要么需要将有很多行的信息。这需要进行一些基准测试,以获得正确的timoeout,并且仍然容易受到一些外部因素的影响,但在99.9%的情况下,这可能会很好地发挥作用


此外,它还减少了数据库上的长查询负载。

您可以使用EXPLAIN返回qeury需要检查的估计行数。@Raymond nijl,您可以提供一个示例吗?有没有办法通过django使用EXPLAIN,或者我必须编写自己的原始sql?