23 lines
1.3 KiB
SQL
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);
|