注释字段的 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 扫描,然后按它排序。
我使用 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 扫描,然后按它排序。