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.

A project to launch or to rescue?

30-minute free call. We look together at what's blocking you and where to start.

Book a discovery call
Indexer proprement Postgres : les 6 règles qui accélèrent tout (2024) · Perrine Honoré