[Performance/DB] Fehlende Indizes auf Fremdschluesseln #51
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#51
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
backend/database_definition.sqllegt nur einen einzigen Index an (idx_instruction_recipe). Alle anderen Fremdschluessel sind unindiziert, obwohl genau ueber sie abgefragt wird.Fehlend
space_userhat den Primaerschluessel(space_id, user_id). Die Abfrage "alle Spaces eines Benutzers" (GetSpacesByUserIdAsync) filtert aber aufuser_idund kann den Index deshalb nicht nutzen.Nebenpunkt
Es gibt kein Migrationswerkzeug.
database_definition.sqlist ein pgAdmin-Export und beschreibt nur den Ist-Zustand. Ein Migrationsordner mit nummerierten Skripten (oder DbUp/FluentMigrator) waere sinnvoll, damit solche Aenderungen nachvollziehbar ausgerollt werden.Erledigt in
backend/migrations/001_constraints_and_indexes.sql.Angelegt werden Indizes auf
ingredient(recipe_id),recipe_image(recipe_id),recipe(space_id),recipe_tag(recipe_id),recipe_suitable_for(recipe_id),meal_plan_entry(meal_plan_id),meal_plan_entry(recipe_id),weekly_meal_plan(space_id, week_start),space_user(user_id)undspace(owner_id).Dazu ein eindeutiger Index auf
lower(email), der übersprungen wird, solange es kollidierende Konten gibt. Die Suche nach der E-Mail läuft passend dazu überlower(email) = lower(@Email), damit vorhandene Konten mit Großbuchstaben weiter gefunden werden.Nebenbefund, ebenfalls behoben:
database_definition.sqlenthielt die Enum-Typenmeal_type,difficulty_levelundspace_rolenicht. Das Skript ließ sich auf einer leeren Datenbank nicht ausführen, es fehlte genau der Teil, den die Tabellen brauchen. DieCREATE TYPE-Anweisungen stehen jetzt am Anfang der Datei.Die Migration wurde auf einer frischen PostgreSQL-16-Datenbank getestet.
Branch
backend/issue-fixes, Commits90183ae.