58 lines
2.6 KiB
SQL
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)
|
|
-- ===========================================
|