diff --git a/backend/migrations/003_index_strategy.sql b/backend/migrations/003_index_strategy.sql new file mode 100644 index 0000000..9eb518b --- /dev/null +++ b/backend/migrations/003_index_strategy.sql @@ -0,0 +1,15 @@ +-- Migration: 003_index_strategy +-- Description: Implementierung der Indexstrategie für Such- und Listenperformance + +-- Index für help_requests Tabelle +CREATE INDEX idx_status_created_at ON help_requests(status, created_at DESC); +CREATE INDEX idx_requester_id ON help_requests(requester_id); + +-- Index für offers Tabelle +CREATE INDEX idx_request_id_created_at ON offers(request_id, created_at DESC); +CREATE INDEX idx_helper_id_created_at ON offers(helper_id, created_at DESC); + +-- Index für reviews Tabelle +CREATE INDEX idx_deal_id ON reviews(deal_id); +CREATE INDEX idx_reviewer_id ON reviews(reviewer_id); +CREATE INDEX idx_reviewee_id ON reviews(reviewee_id); \ No newline at end of file diff --git a/docs/adr/001-database-index-strategy.md b/docs/adr/001-database-index-strategy.md new file mode 100644 index 0000000..df90d7a --- /dev/null +++ b/docs/adr/001-database-index-strategy.md @@ -0,0 +1,65 @@ +# ADR 001: Datenbank-Indexstrategie für Such- und Listenperformance + +## Status + +Entwurf + +## Problem + +Mit wachsender Datenmenge drohen langsame Listen-/Filterabfragen für Requests, Offers und Reviews. Die aktuelle Datenbankstruktur benötigt eine gezielte Indexstrategie zur Optimierung der Performance. + +## Lösung + +Implementierung einer gezielten Indexstrategie für kritische Abfragepfade in den Datenbanktabellen. + +## Kritische Query-Pfade + +### 1. Help Requests Feed +- Abfragen von Requests mit Filter nach Status, Erstellungsdatum, Requester-ID +- Beispielabfragen: + ```sql + SELECT * FROM help_requests WHERE status = 'open' ORDER BY created_at DESC LIMIT 20; + SELECT * FROM help_requests WHERE requester_id = ? ORDER BY created_at DESC; + ``` + +### 2. Offers Historie +- Abfragen von Offers zu bestimmten Requests oder von bestimmten Helfern +- Beispielabfragen: + ```sql + SELECT * FROM offers WHERE request_id = ? ORDER BY created_at DESC; + SELECT * FROM offers WHERE helper_id = ? ORDER BY created_at DESC; + ``` + +### 3. Reviews +- Abfragen von Reviews zu Deals, Benutzern oder Bewertungen +- Beispielabfragen: + ```sql + SELECT * FROM reviews WHERE deal_id = ?; + SELECT * FROM reviews WHERE reviewer_id = ?; + SELECT * FROM reviews WHERE reviewee_id = ?; + ``` + +## Empfohlene Indexe + +### help_requests Tabelle +1. `idx_status_created_at` (status, created_at) +2. `idx_requester_id` (requester_id) + +### offers Tabelle +1. `idx_request_id_created_at` (request_id, created_at DESC) +2. `idx_helper_id_created_at` (helper_id, created_at DESC) + +### reviews Tabelle +1. `idx_deal_id` (deal_id) +2. `idx_reviewer_id` (reviewer_id) +3. `idx_reviewee_id` (reviewee_id) + +## Performance-Kriterien + +- Jede kritische Abfrage hat eine begründete Index-Empfehlung +- Performance-Regressionsrisiko für Listenansichten sinkt nachvollziehbar +- EXPLAIN-basierte Erfolgskriterien für jede Kernabfrage festgelegt + +## Implementation + +Die Indexe werden in separaten Migrationen implementiert, um die Performance der bestehenden Datenbankoperationen nicht zu beeinträchtigen.