Tous les termes du glossaire

Index GIN

Qu’est-ce qu’un index GIN dans PostgreSQL ?

Un index GIN (index inversé généralisé) associe chaque élément contenu dans une valeur, comme un élément de tableau, une clé JSONB ou un mot de recherche textuelle, aux lignes qui le contiennent.

GIN signifie Generalized Inverted Index (index inversé généralisé). Il est conçu pour les valeurs composites, où chaque élément indexé contient plusieurs composants, et pour les requêtes qui recherchent les éléments contenant des composants précis. Ses usages typiques sont les tableaux, jsonb et la recherche plein texte.

Avec les classes d’opérateurs par défaut, GIN prend en charge des opérateurs comme @> (contient) et && (chevauche) pour les tableaux, ainsi que @> et les opérateurs d’existence de clé pour jsonb. Les recherches sont rapides, mais les insertions et les mises à jour coûtent plus cher qu’avec un B-tree. Le paramètre de stockage fastupdate, actif par défaut, met les nouvelles entrées en tampon dans une liste d’attente (pending list) pour atténuer ce coût.

Exemple

L’exemple indexe une colonne text[] avec GIN et interroge EXPLAIN sur les lignes dont les tags incluent t42. La sortie affiche un Bitmap Index Scan on docs_tags_gin.

CREATE TABLE docs (id int PRIMARY KEY, tags text[]);
INSERT INTO docs
SELECT g, ARRAY['t' || (g % 100), 'u' || (g % 7)] FROM generate_series(1, 100000) AS g;
CREATE INDEX docs_tags_gin ON docs USING gin (tags);
ANALYZE docs;

EXPLAIN SELECT id FROM docs WHERE tags @> ARRAY['t42'];

Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.

Références

Documentation officielle de PostgreSQL (en anglais).

Termes associés