Django ORM问题:在2个不同的视图上使用相同的查询集,其运行速度大大不同

时间:2018-08-20 13:56:10

标签: django django-views django-orm

我有两个视图-一个是管理站点的一部分,另一个是可公开访问的视图。

它们都执行相同的查询集-从字面上复制和粘贴代码。

masterQuery = myObject.objects.filter(is_public=True)
newQuery =  queriedForms.filter(ref_to_parent_form__record_reference__form_name__icontains=term['TVAL'], ref_to_parent_form__record_reference_type__pk=rtypePK)
newQuery = newQuery.filter(flagged_for_deletion=False)
term['count'] =  newQuery.count()
masterQuery = (newQuery & masterQuery)
singleQueryStats['intersections'] = masterQuery.count()

每个视图都具有完全相同的代码-这不是最漂亮的查询-但无论如何:在admin视图上,它的运行时间不到1/4秒。在公共Views.py视图上-需要8分钟。我不知道为什么。 queryset.query输出是相同的。变量(通过POST提交的admin /通过GET提交的公共)也匹配。

编辑:我试图进一步简化事情,但无济于事:

SELECT `maqluengine_form`.`id`, `maqluengine_form`.`form_name`, `maqluengine_form`.`form_number`, `maqluengine_form`.`form_geojson_string`, `maqluengine_form`.`hierarchy_parent_id`, `maqluengine_form`.`is_public`, `maqluengine_form`.`project_id`, `maqluengine_form`.`date_created`, `maqluengine_form`.`created_by_id`, `maqluengine_form`.`date_last_modified`, `maqluengine_form`.`modified_by_id`, `maqluengine_form`.`sort_index`, `maqluengine_form`.`form_type_id`, `maqluengine_form`.`flagged_for_deletion` FROM `maqluengine_form` WHERE (`maqluengine_form`.`form_type_id` = 319 AND `maqluengine_form`.`flagged_for_deletion` = False)

这是两个视图上的查询输出-管理员视图用时<1/4秒,公共视图用时约4-8分钟,这取决于对此查询集执行count()操作

没有任何逻辑可以改变时间-计时器服务器错误日志的打印内容会匹配直到执行计数为止。

在建立计数之前都不会评估两个查询集。这里仍然完全茫然。

1 个答案:

答案 0 :(得分:0)

我是个白痴-两个查询集不一样-另一个布尔值被击中,而我读错了日志-答案是查询集不一样-所以可以回答这个问题。

我提出了一个新问题,以找出两者之间的巨大速度差异。