Some checks failed
Deploy Development / deploy (push) Successful in 43s
Test Suite / pytest-backend (push) Successful in 36s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 11s
Test Suite / playwright-tests (push) Failing after 1m31s
- Bumped APP_VERSION to 0.8.114 and updated DB_SCHEMA_VERSION to 20260514060. - Added changelog entry for version 0.8.114, detailing migration 060 for exercise scaling and indexing improvements.
34 lines
1.8 KiB
SQL
34 lines
1.8 KiB
SQL
-- Migration 060: Übungslisten bei großem Bestand (Ziel: Tausende Übungen, viele Filterkombinationen).
|
|
-- Ergänzt 058 (globale Sortierung / created_by): kleinere Partial-Indizes für häufige
|
|
-- Sichtbarkeits-Pfade der Bibliothek sowie Junction-Indizes für die List-Subqueries
|
|
-- (primary_focus_name / JSON-Aggregate mit is_primary).
|
|
--
|
|
-- Bereits vorhanden und sinnvoll: UNIQUE(exercise_id, …) auf den M:N-Tabellen für EXISTS-Joins;
|
|
-- GIN auf exercises.search_vector (014); idx_exercises_exercise_kind (056).
|
|
|
|
-- Official: OR-Zweig der Bibliothek — kompakter als Full-Table-Scan bei BitmapOr mit anderen Partial-Indizes
|
|
CREATE INDEX IF NOT EXISTS idx_exercises_list_official_updated
|
|
ON exercises (updated_at DESC)
|
|
WHERE visibility = 'official'
|
|
AND COALESCE(status, '') <> 'archived';
|
|
|
|
-- Club: häufig club_id + Sortierung nach updated_at (Mandanten-Bibliothek)
|
|
CREATE INDEX IF NOT EXISTS idx_exercises_list_club_updated
|
|
ON exercises (club_id, updated_at DESC)
|
|
WHERE visibility = 'club'
|
|
AND club_id IS NOT NULL
|
|
AND COALESCE(status, '') <> 'archived';
|
|
|
|
-- List-SELECT: Subqueries / json_agg sortieren zuerst nach is_primary (siehe exercises.py)
|
|
CREATE INDEX IF NOT EXISTS idx_exercise_focus_areas_exercise_primary
|
|
ON exercise_focus_areas (exercise_id, is_primary DESC NULLS LAST, focus_area_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_exercise_style_directions_exercise_primary
|
|
ON exercise_style_directions (exercise_id, is_primary DESC NULLS LAST, style_direction_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_exercise_training_types_exercise_primary
|
|
ON exercise_training_types (exercise_id, is_primary DESC NULLS LAST, training_type_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_exercise_target_groups_exercise_primary
|
|
ON exercise_target_groups (exercise_id, is_primary DESC NULLS LAST, target_group_id);
|