注释字段的 Django 过滤器太慢

Django filter by annotated field is too slow

我使用 DRF 并且我有模型 Motocycle,它在数据库中有 > 2000 个对象。模型有一个品牌。我想按 full_name 搜索:

queryset = Motocycle.objects.prefetch_related(
        "brand"
        ).annotate(
            full_name=Concat(
                'brand__title',
                Value(' - '),
                'title',
            )
        )
    )

我想按 full_name 筛选,但查询 运行 非常慢:

(1.156) SELECT "mp_api_motocycle"."id"...

不使用分页过滤:

(3.980) SELECT "mp_api_motocycle"."id"...

是否有可能使此查询更快?

将您的 full_name 注释保留为数据库中的一列并为其添加索引。

否则,您在计算 full_name 的同时进行完整 table 扫描,然后按它排序。