按注释字段的Django过滤器太慢

时间:2017-08-01 11:53:21

标签: django annotate django-rest-framework

我使用DRF并且我有模型Motocycle,其具有> DB中的2000个对象。 Model有一个品牌。我想通过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"...

有一些可能使这个查询更快?

1 个答案:

答案 0 :(得分:1)

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

否则,您在计算full_name时进行全表扫描,然后按它进行排序。