58 lines
2.6 KiB
SQL

-- ============================================================
-- 02_indexes.sql — Indexes pour améliorer les perfs
-- ============================================================
-- ===========================================
-- Messages (par dossier + tri par date)
-- Utilisé dans verify.sql (EXPLAIN + ORDER BY cree_le)
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_messages_id_dossier_cree_le
ON messages (id_dossier, cree_le DESC);
-- ===========================================
-- Evenements (filtrés par enfant + date)
-- Utilisé dans verify.sql (WHERE id_enfant AND date_debut >= ...)
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_evenements_id_enfant_date_debut
ON evenements (id_enfant, date_debut DESC);
-- ===========================================
-- Notifications (par utilisateur + lues/non lues + tri par date)
-- Utilisé dans verify.sql (WHERE id_utilisateur AND lu=false ORDER BY cree_le DESC)
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_notifications_user_lu_cree_le
ON notifications (id_utilisateur, lu, cree_le DESC);
-- ===========================================
-- Dossiers (filtrés par parent + enfant + statut + tri par date)
-- Utilisé dans verify.sql
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_dossiers_id_parent_enfant_statut_cree_le
ON dossiers (id_parent, id_enfant, statut, cree_le DESC);
-- ===========================================
-- Contrats (lookup par dossier unique)
-- ===========================================
CREATE UNIQUE INDEX IF NOT EXISTS idx_contrats_id_dossier
ON contrats (id_dossier);
-- ===========================================
-- JSONB indexes (si filtres fréquents sur planning/planning_souhaite)
-- Exemple dans verify.sql : dossiers.planning_souhaite @> ...
-- ===========================================
CREATE INDEX IF NOT EXISTS idx_dossiers_planning_souhaite_gin
ON dossiers USING gin (planning_souhaite jsonb_path_ops);
CREATE INDEX IF NOT EXISTS idx_contrats_planning_gin
ON contrats USING gin (planning jsonb_path_ops);
-- ===========================================
-- Sanity check : validation des emails uniques
-- Déjà couvert par UNIQUE dans la table utilisateurs
-- ===========================================
-- ===========================================
-- Bonus : accélérer les jointures fréquentes
-- (utilisateurs.id, enfants.id, parents.id_utilisateur sont PK → déjà indexées automatiquement)
-- ===========================================