在Django中,通常会执行以下操作
MyModel.objects.filter(id__in=[huge array])
然而,它不是很有效,如下面的答案所述:https://dba.stackexchange.com/questions/91247/optimizing-a-postgres-query-with-a-large-in
如果你使用的是ORM,那么在Django中复制上述答案的好方法是什么呢?或者你必须对整个查询使用raw sql。
我想知道的是,如果你有一个查询集,是否有一个好的方法将这个查询集与你创建的临时表(可能是在原始sql中)连接起来。
2条答案
按热度按时间xytpbqjk1#
您可以使用select_related选项来过滤第二个表(另一个模型),它将产生
in
效果。类似这样的答案:Django select_related filter
如果可能的话,我会将其用于大型
IN
。dl5txlt92#
django-model-utils包通过
JoinManager
提供了类似的功能。不幸的是,它还要求以查询集的形式提供
huge_array
的ID。如果这不起作用,您可以查看实现并尝试根据您自己的用例进行调整。