-- ============================================= -- 02_indexes.sql : Index FK + colonnes critiques -- ============================================= -- Recommandation : exécuter après 01_init.sql -- =========== -- UTILISATEURS -- =========== -- Recherche par email (insensibilité à la casse pour lookup) CREATE INDEX IF NOT EXISTS idx_utilisateurs_lower_courriel ON utilisateurs (LOWER(courriel)); -- =========== -- ASSISTANTES_MATERNELLES -- =========== -- FK -> utilisateurs(id) CREATE INDEX IF NOT EXISTS idx_am_id_utilisateur ON assistantes_maternelles (id_utilisateur); -- ======= -- PARENTS -- ======= -- FK -> utilisateurs(id) CREATE INDEX IF NOT EXISTS idx_parents_id_utilisateur ON parents (id_utilisateur); -- Co-parent (nullable) CREATE INDEX IF NOT EXISTS idx_parents_id_co_parent ON parents (id_co_parent); -- ======= -- ENFANTS -- ======= -- (souvent filtrés par statut / date_naissance ? à activer si besoin) -- CREATE INDEX IF NOT EXISTS idx_enfants_statut ON enfants (statut); -- CREATE INDEX IF NOT EXISTS idx_enfants_date_naissance ON enfants (date_naissance); -- ================ -- ENFANTS_PARENTS (N:N) -- ================ -- PK composite déjà en place (id_parent, id_enfant), ajouter index individuels si jointures unilatérales fréquentes CREATE INDEX IF NOT EXISTS idx_enfants_parents_id_parent ON enfants_parents (id_parent); CREATE INDEX IF NOT EXISTS idx_enfants_parents_id_enfant ON enfants_parents (id_enfant); -- ======== -- DOSSIERS -- ======== -- FK -> parent / enfant CREATE INDEX IF NOT EXISTS idx_dossiers_id_parent ON dossiers (id_parent); CREATE INDEX IF NOT EXISTS idx_dossiers_id_enfant ON dossiers (id_enfant); -- Statut (filtrages "à traiter", "envoyé", etc.) CREATE INDEX IF NOT EXISTS idx_dossiers_statut ON dossiers (statut); -- JSONB : si on fait des requêtes @> sur le planning souhaité -- CREATE INDEX IF NOT EXISTS idx_dossiers_planning_souhaite_gin -- ON dossiers USING GIN (planning_souhaite); -- ======== -- MESSAGES -- ======== -- Filtrage par dossier + tri chronologique CREATE INDEX IF NOT EXISTS idx_messages_id_dossier_cree_le ON messages (id_dossier, cree_le); -- Recherche par expéditeur CREATE INDEX IF NOT EXISTS idx_messages_id_expediteur_cree_le ON messages (id_expediteur, cree_le); -- ========= -- CONTRATS -- ========= -- UNIQUE(id_dossier) existe déjà -> index implicite -- Tri / filtres fréquents CREATE INDEX IF NOT EXISTS idx_contrats_statut ON contrats (statut); -- JSONB planning : activer si on requête par clé -- CREATE INDEX IF NOT EXISTS idx_contrats_planning_gin -- ON contrats USING GIN (planning); -- ================== -- AVENANTS_CONTRATS -- ================== CREATE INDEX IF NOT EXISTS idx_avenants_contrats_id_contrat_cree_le ON avenants_contrats (id_contrat, cree_le); CREATE INDEX IF NOT EXISTS idx_avenants_contrats_initie_par ON avenants_contrats (initie_par); CREATE INDEX IF NOT EXISTS idx_avenants_contrats_statut ON avenants_contrats (statut); -- ========= -- EVENEMENTS -- ========= -- Accès par enfant + période CREATE INDEX IF NOT EXISTS idx_evenements_id_enfant_date_debut ON evenements (id_enfant, date_debut); -- Filtrage par auteur / AM / parent CREATE INDEX IF NOT EXISTS idx_evenements_cree_par ON evenements (cree_par); CREATE INDEX IF NOT EXISTS idx_evenements_id_am ON evenements (id_am); CREATE INDEX IF NOT EXISTS idx_evenements_id_parent ON evenements (id_parent); CREATE INDEX IF NOT EXISTS idx_evenements_type ON evenements (type); CREATE INDEX IF NOT EXISTS idx_evenements_statut ON evenements (statut); -- ================= -- SIGNALEMENTS_BUGS -- ================= CREATE INDEX IF NOT EXISTS idx_signalements_bugs_id_utilisateur_cree_le ON signalements_bugs (id_utilisateur, cree_le); -- ======= -- UPLOADS -- ======= CREATE INDEX IF NOT EXISTS idx_uploads_id_utilisateur_cree_le ON uploads (id_utilisateur, cree_le); -- ============= -- NOTIFICATIONS -- ============= -- Requêtes fréquentes : non lues + ordre chrono CREATE INDEX IF NOT EXISTS idx_notifications_user_lu_cree_le ON notifications (id_utilisateur, lu, cree_le); -- Option : index partiel pour "non lues" -- CREATE INDEX IF NOT EXISTS idx_notifications_non_lues -- ON notifications (id_utilisateur, cree_le) -- WHERE lu = false; -- =========== -- VALIDATIONS -- =========== -- Requêtes par utilisateur validé, par statut et par date CREATE INDEX IF NOT EXISTS idx_validations_id_utilisateur_cree_le ON validations (id_utilisateur, cree_le); CREATE INDEX IF NOT EXISTS idx_validations_statut ON validations (statut);