Files
ssh-jumphost/app/db/migrations/0020_session_user_ended_index.sql
2026-09-02 20:30:44 +02:00

23 lines
1.3 KiB
SQL

-- Migration 0020: Index fuer die eigene-Sitzungen-Abfrage (Teil F.3.6,
-- Umsetzungsauftrag_Sonnet5.md): GET /catalog/sessions (app/catalog/
-- routes.py) filtert immer nach user_id UND (im Standardfall
-- active_only=true) zusaetzlich nach ended_at IS NULL.
--
-- Bisher existierte nur idx_sessions_user (user_id allein,
-- app/db/migrations/0001_initial.sql:107) -- fuer eine wachsende
-- sessions-Tabelle waere "meine noch offenen Sitzungen" damit ein
-- Index-Scan ueber ALLE Sitzungen dieses Benutzers mit anschliessendem
-- Filter auf ended_at, statt direkt auf die (typischerweise sehr kleine)
-- Teilmenge der offenen Sitzungen zuzugreifen.
--
-- Ein zusammengesetzter Index (user_id, ended_at) deckt per
-- SQLite-Index-Praefix-Regel sowohl "alle meine Sitzungen" (user_id
-- allein) als auch "meine offenen Sitzungen" (user_id + ended_at) ab und
-- macht idx_sessions_user damit redundant -- bewusst NICHT geloescht
-- (Projektkonvention: Indizes/Tabellen werden beim Rueckbau nicht
-- gedroppt, siehe 0019_retire_direct_role_grants.sql; ausserdem nutzen
-- andere Abfragen im Adminbereich, z.B. GET /admin/sessions, weiterhin
-- ausschliesslich user_id ueber JOINs, nicht ueber diesen Index).
CREATE INDEX IF NOT EXISTS idx_sessions_user_ended ON sessions(user_id, ended_at);