【发布时间】:2012-03-24 06:19:56
【问题描述】:
我正在使用 Q 对象构造一个查询,但它挂起。
当我将过滤器“与”在一起时,查询工作正常。示例如下:
School.objects.filter( Q(city__search='"orlando"'), Q(schoolattribute__attribute__name__search='"subjects"') )
但是当我将过滤器“或”在一起时,查询会挂起,因为我假设要处理的内容太多:
School.objects.filter( Q(city__search='"orlando"') | Q(schoolattribute__attribute__name__search='"subjects"')
我想知道这里到底发生了什么,我能做些什么来缓解它。为什么使用“AND”时查询有效,而使用“OR”时查询无效?
编辑:很好的提示@psagers。所以事实证明,AND 查询获得了两个 INNER JOIN,而 OR 查询获得了两个 LEFT OUTER JOIN。
【问题讨论】:
-
如有疑问,请转到 SQL。我建议构建查询集,然后从
query属性中获取原始 SQL。如果仍然不清楚,您可以将其插入您的数据库引擎并要求它为您分析性能。见stackoverflow.com/questions/3748295/…。