[Performance] N+1-Abfragen beim Laden eines Wochenplans #49
Labels
No labels
bug
critical
database
duplicate
enhancement
help wanted
invalid
performance
question
refactoring
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Aceless/RecipePlanner#49
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Data/MealPlanRepository.LoadEntrieslaedt fuer jeden Eintrag das komplette Rezept:GetRecipeByIdfuehrt sechs Statements aus (Rezept, Zutaten, Schritte, Tags, SuitableFor, Bilder).Rechnung
Dazu kommt: Der Wochenplan liefert am Ende nur
RecipeListItemDto, Zutaten und Zubereitungsschritte werden also geladen und dann verworfen.Fix
QueryMultiplemitWHERE recipe_id = ANY(@Ids)laden, danach im Speicher zuordnen (so wie esGetRecipesInSpacebereits macht).AddEntryundUpdateEntryverwenden.Erledigt.
LoadEntriesAsyncsammelt die Rezept-Ids aller Einträge und lädt sie über die neue MethodeGetRecipeSummariesAsyncmitWHERE id = ANY(@Ids). Zutaten und Zubereitungsschritte werden dabei gar nicht erst geholt, der Wochenplan zeigt ohnehin nurRecipeListItemDto.Gemessen mit
log_statement = allauf einer Testdatenbank, Wochenplan mit sieben Einträgen und sieben verschiedenen Rezepten:Die sieben sind Rollenprüfung, Wochenplan, Einträge und je eine Abfrage für Rezepte, Tags, Mealtypes und Bilder. Die Zahl bleibt konstant, unabhängig von der Anzahl der Einträge. Bei einer vollen Woche mit 21 Einträgen waren es vorher 129.
GetRecipesInSpacenutzt jetzt Joins statt der dreifach wiederholten Unterabfrage.Branch
backend/issue-fixes, Commits77327fc,3957404.