Ich benutze DRF und ich habe Modell Motocycle, die> 2000 Objekte in DB hat. Modell hat eine Marke. Ich möchte von full_name suchen:Django Filter von annotierten Feld ist zu langsam
queryset = Motocycle.objects.prefetch_related(
"brand"
).annotate(
full_name=Concat(
'brand__title',
Value(' - '),
'title',
)
)
)
ich von full_name filtern möchten, aber Abfrage läuft sehr langsam:
(1.156) SELECT "mp_api_motocycle"."id"...
Ohne Filterung mit Paginierung:
(3.980) SELECT "mp_api_motocycle"."id"...
Es gibt einige ist Möglichkeit, diese Abfrage schneller zu machen?
'full_name' wird eine DB-Spalte und ein Modellattribut sein, welches aktualisiert wird, bevor das Modell gespeichert wird? Oder ich habe dich falsch verstanden? Vielen Dank. –
Ja, es wird Modellfeld sein, das beim Speichern aktualisiert wird, es kann gesagt werden, dass dies Bit Denormierung ist, um die Leistung zu verbessern – iklinac
Auch, warum verwenden Sie prefetch_related, wenn es nur eine Marke gibt, besser zu verwenden selected_related – iklinac