Index B-tree, Hash, GiST ou GIN
Comparez les principaux types d’index de PostgreSQL et choisissez celui qui convient aux requêtes d’égalité, d’intervalle, de géométrie, JSON et de recherche en texte intégral.
Index B-tree, Hash, GiST ou GIN est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Vue d’ensemble des types d’index
PostgreSQL propose plusieurs types d’index, chacun étant optimisé pour différents modes d’accès :
- Arbre B — égalité et plage (par défaut)
- Hachage — égalité uniquement
- GiST — données géométriques, texte intégral, usages personnalisés
- GIN — valeurs composées (tableaux, JSONB, texte intégral)
- BRIN — plages de blocs — tables volumineuses et triées
- SP-GiST — arbres partitionnés selon l’espace
Arbre B : le type par défaut
Utilisé dans 95 % des cas. Prend en charge =, <, <=, >, >=, BETWEEN, ORDER BY :
CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);Index de hachage
Recherches par égalité uniquement. Fiable après une panne depuis PG 10. Plus petit et légèrement plus rapide qu’un arbre B pour une égalité pure, mais son domaine d’utilisation est très limité :
CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.Index GiST
Arbre de recherche généralisé — enfichable, il prend en charge les types d’intervalles, les types géométriques, les adresses IP et le texte intégral :
CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.
CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.Index GIN
Index inversé généralisé — idéal pour les valeurs composées où chaque élément correspond à de nombreuses lignes :
CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators
CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search
CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queriesIndex BRIN
Les index de plages de blocs résument les plages de valeurs sur N pages. Ils sont minuscules (quelques kilo-octets pour des tables de plusieurs téraoctets), mais ne sont efficaces que lorsque les données sont physiquement triées selon la colonne indexée :
CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.Comparer les tailles
Pour une table contenant un milliard de lignes :
- Arbre B sur un BIGINT : environ 30 GB
- BRIN sur un TIMESTAMPTZ : environ 1 MB
BRIN est considérablement plus petit, mais ne surpasse l’arbre B que pour les requêtes séquentielles ou triées.
Choisir un type d’index
Processus de décision :
- Égalité + plage sur un scalaire → arbre B
- Égalité sur un très grand ensemble de scalaires → arbre B (hachage uniquement après mesure)
- Tableaux / JSONB / texte intégral → GIN
- Types d’intervalles, géométrie, texte approximatif → GiST
- Table immense et triée, à ajouts uniquement → BRIN
Compromis liés à GIN
GIN est le plus rapide pour les requêtes "trouver toutes les lignes contenant X", mais il est plus lent pour INSERT/UPDATE qu’un arbre B. Pour les tables soumises à de très nombreuses écritures, envisagez fastupdate=off afin de contrôler la liste d’attente de GIN.
Classes d’opérateurs
Chaque type d’index fonctionne avec des opérateurs spécifiques. JSONB utilise jsonb_path_ops pour des index plus petits et plus rapides, limités à la contenance :
CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.Index composés selon le type
Les index composés en arbre B utilisent la correspondance par préfixe de gauche. Les index GIN composés fonctionnent, mais sont plus volumineux ; vous créez généralement des index GIN distincts sur chaque colonne.
Récapitulatif
Choisissez le type d’index adapté à la requête.
- Arbre B : par défaut
- GIN : tableaux/JSONB/texte intégral
- GiST : intervalles/géométrie/texte approximatif
- BRIN : séquentiel/ajouts uniquement
Vérification rapide
Vous indexez une colonne TEXT[] pour des requêtes de "contenance". Quel type d’index convient ?
Questions Fréquemment Posées
La leçon « Index B-tree, Hash, GiST ou GIN » est-elle gratuite ?
Oui — le texte complet de « Index B-tree, Hash, GiST ou GIN » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Index B-tree, Hash, GiST ou GIN » ?
Comparez les principaux types d’index de PostgreSQL et choisissez celui qui convient aux requêtes d’égalité, d’intervalle, de géométrie, JSON et de recherche en texte intégral. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Index B-tree, Hash, GiST ou GIN » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Index B-tree, Hash, GiST ou GIN
- Index composites et ordre des colonnes
- Index partiels et index d’expressions
- Maintenance des index et gonflement