postgresql 在Django中使用临时表的join作为'IN'的替代

mbyulnm0  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(2)|浏览(133)

在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中)连接起来。

xytpbqjk

xytpbqjk1#

您可以使用select_related选项来过滤第二个表(另一个模型),它将产生in效果。
类似这样的答案:Django select_related filter
如果可能的话,我会将其用于大型IN

dl5txlt9

dl5txlt92#

django-model-utils包通过JoinManager提供了类似的功能。
不幸的是,它还要求以查询集的形式提供huge_array的ID。如果这不起作用,您可以查看实现并尝试根据您自己的用例进行调整。

相关问题