【问题标题】:Using join of temporary table as an alternative of `IN` in Django在 Django 中使用临时表的连接代替“IN”
【发布时间】:2019-03-29 04:39:33
【问题描述】:

在 Django 中,通常执行以下操作

MyModel.objects.filter(id__in=[huge array])

但是,如以下答案所述,它的效率不是很高:https://dba.stackexchange.com/questions/91247/optimizing-a-postgres-query-with-a-large-in

鉴于您使用的是 ORM,在 Django 中复制上述答案的好方法是什么。或者您是否必须为整个查询下拉到原始 sql。

我正在寻找的是,如果您有一个查询集,是否有一种将查询集与您创建的临时表(可能在原始 sql 中)连接的好方法。

【问题讨论】:

  • 最快的操作很可能是将 ID 放入表中,索引列,然后对 MyModel 进行存在检查。
  • [huge array] 是如何填充的?
  • 你能发布你的模型吗?
  • [huge array] 的填充方式不是很重要。只需假设它从一开始就存在,填充它所花费的时间不是考虑的一部分。如果有一种很好的方法可以将其转换为在 django 中使用模型,那么我对正在链接的答案中描述的方法更感兴趣。

标签: python django postgresql django-models django-orm


【解决方案1】:

您可以使用 select_related 选项来过滤您的第二个表(另一个模型),这将产生in 效果。

类似这样的答案:Django select_related filter

我尽可能将其用于大型INs。

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 2011-08-24
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2021-06-07
    • 2021-05-12
    相关资源
    最近更新 更多