En bref

Un index oublié fait passer une requête de 5 ms à 5 s, un index inutile ralentit chaque insertion. Les règles de base : indexer chaque colonne utilisée en filtre, donner son index à chaque clé étrangère — Postgres ne le fait pas automatiquement — utiliser GIN pour le JSONB et le plein texte, et vérifier le plan d'exécution avant et après chaque ajout.

Un index oublié fait passer une requête de 5 ms à 5 s. Un index inutile ralentit chaque insert. Voici les 6 règles à appliquer.

Règle d'or : indexez chaque colonne utilisée dans unWHERE, JOIN ou ORDER BY critique. Rien d'autre.

1. B-tree par défaut

Chaque foreign key doit avoir son index B-tree. Postgres ne le fait pas automatiquement.

2. GIN pour JSONB et tableaux

Recherche full-text, filtres sur JSONB fields, arrays : GIN est l'index qui marche.

3. Partial indexes

Filtrez à la création : CREATE INDEX ... WHERE status = 'active'. Économie disque + performance.

4. Composite indexes bien ordonnés

L'ordre des colonnes compte : la plus sélective en premier, sauf besoinORDER BY. Un composite mal ordonné n'est pas utilisé.

5. Covering indexes

INCLUDE pour ajouter des colonnes sans clef : Postgres n'a plus besoin de lire la table. Boost x 3-10 sur les reads.

6. EXPLAIN ANALYZE religieusement

Avant ET après chaque ajout d'index. Vérifiez que Postgres l'utilise vraiment. Un index qui n'apparaît pas dans le plan est un poids mort.

Un bon index est invisible et rapide. Un mauvais index ralentit sans qu'on comprenne pourquoi.

On audite votre base ?

En 30 minutes on peut identifier vos 5 requêtes les plus lentes. Réservez un appel. À lire : Multi-tenant Postgres.

Un projet à lancer ou à sauver ?

30 min d'appel gratuit. On regarde ensemble ce qui bloque et par où commencer.

Réserver un appel découverte