almessadi.
Retour à l'index

BRIN et GIN Importent Parce Qu'ils Optimisent des Charges de Travail Très Différentes_

BRIN aide avec de grands ensembles de données naturellement ordonnés, tandis que GIN aide avec des documents, des tableaux et des recherches de style lookup. Connaître la différence permet d'économiser de l'argent réel et de réduire la latence.

Publié5 octobre 2024
Temps de lecture6 min read

L'indexation PostgreSQL devient beaucoup plus simple une fois que vous cessez de penser en termes de « index ou pas d'index » et commencez à penser en termes de forme de charge de travail.

BRIN et GIN sont un bon exemple car ils résolvent presque des problèmes opposés.

Quand BRIN Aide

BRIN est utile pour des tables très volumineuses où les valeurs sont naturellement corrélées à l'ordre physique des lignes, telles que :

  • timestamps dans les tables d'événements en ajout uniquement
  • identifiants en augmentation monotone
  • données de séries temporelles

Il stocke des résumés légers des plages de blocs plutôt que d'indexer chaque ligne individuellement. C'est pourquoi il peut être minuscule par rapport à un B-arbre.

Quand GIN Aide

GIN est utile lorsque vous devez rechercher à l'intérieur de valeurs composites :

  • jsonb
  • tableaux
  • documents en texte intégral

Il indexe les éléments contenus plutôt que de traiter la valeur entière comme un blob opaque.

Un Exemple Pratique

Pour une grande table d'événements :

CREATE INDEX events_created_at_brin_idx
ON events
USING BRIN (created_at);

Pour une colonne jsonb :

CREATE INDEX users_preferences_gin_idx
ON users
USING GIN (preferences);

Ce sont tous deux des « index », mais ils améliorent des types de requêtes très différents.

Échange de Compromis

BRIN est compact et bon marché, mais dépend des caractéristiques d'ordre. GIN est puissant, mais généralement plus grand et plus coûteux à maintenir lors des écritures.

C'est pourquoi la bonne question n'est pas « lequel est plus rapide ? » mais « lequel correspond au modèle d'accès ? »

Lectures Complémentaires