django __in 具有非常大列表的查询集太慢

问题描述 投票:0回答:1

我在视图中有这个过滤器:

cat_ids = list(models.Catalogue.objects.only('city', 'district').filter(
    Q(*[Q(city__contains=x) for x in city_district], _connector=Q.OR) |
    Q(*[Q(district__contains=x) for x in city_district], _connector=Q.OR)
).values_list('pk', flat=True))

result = models.Catalogue.objects.filter(pk__in=cat_ids)

cat_ids 是一个非常大的列表(超过 10000 条数据)。

django 5秒内返回结果。我该如何改进这个查询?有什么替代方案吗?

python django django-queryset
1个回答
0
投票

如果您使用 Django 调试工具栏,请小心,过滤器中使用的长列表项将使您的查询速度慢 100 倍。如果是这种情况,只需通过取消选中工具栏上的 sql 框来禁用 sql 模块,如果您发现差异,那就是这样。 否则,这可能是一个查询优化问题,之前的答案很好地解释了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.