Index BRIN – Principe

avr. 19, 2016·
Adrien Nayrat
Adrien Nayrat
· 2 min. de lecture
post Linux

La version 9.5 de PostgreSQL sortie en Janvier 2016 propose un nouveau type d’index : les Index BRIN pour Bloc Range INdex. Ces derniers sont recommandés pour les tables volumineuses et corrélées avec leur emplacement. J’ai décidé de consacrer une série d’article sur ces index :

Pour information, je serai présent au PGDay France à Lille le mardi 31 mai pour présenter cet index. Il y aura également plein d’autres conférences intéressantes!

Introduction

PostgreSQL propose déjà différents type d’index : B-Tree, GIN, GiST, SP-GiST, Hash 1

Les discussions ont commencées en 2008 : Segment Exclusion

Suivi de ce RFC en 2008 qui propose les « Minmax indexes » qui sera renommé plus tard en BRIN.

Physiquement, une table est composée de blocs de 8Ko et chaque bloc contient des enregistrements 2. L’idée des index BRIN est de stocker dans un index la valeur minimale et maximale d’un attribut d’un ensemble de bloc (range) 3. Ainsi il est possible d’exclure un ensemble de bloc si vous recherchez une valeur qui n’est pas comprise dans l’intervalle.

Note : Les index BRIN sont similaires aux storage indexes d’Oracle (Exadata Storage Indexes).

Voici les types supportés : Built-in Operator Classes

 1abstime
 2bigint
 3bit
 4bit varying
 5box
 6bytea
 7character
 8"char"
 9date
10double precision
11inet
12inet
13integer
14interval
15macaddr
16name
17numeric
18pg_lsn
19oid
20any range type
21real
22reltime
23smallint
24text
25tid
26timestamp without time zone
27timestamp with time zone
28time without time zone
29time with time zone
30uuid

Il est également possible d’indexer plusieurs colonnes. Notez que la documentation actuelle ne le mentionne pas, c’est corrigé dans la version en cours de développement : Multicolumn Indexes


  1. SELECT amname FROM pg_am; ou encore http://www.postgresql.org/docs/current/static/indexes-types.html ↩︎

  2. Si un enregistrement ne tient pas dans un bloc il est stocké séparément dans ce qu’on appelle le TOAST (The Oversized-Attribute Storage Technique). Plus exactement, si un enregistrement dépasse 2ko. ↩︎

  3. L’index contient également deux booléens indiquant si l’ensemble contient des valeurs NULL (hasnulls ) ou s’il ne contient que des valeurs NULL (allnulls) ↩︎

Adrien Nayrat
Auteurs
Expert DBA PostgreSQL

J’ai occupé pendant 7 ans divers postes d’ingénieur système et réseau. Et c’est à partir de 2013 que j’ai commencé à mettre les doigts dans PostgreSQL. J’ai occupé des postes de consultant, formateur, mais également DBA de production (Doctolib, Peopledoc).

Ce blog me permet de partager mes connaissances et trouvailles, ainsi que mes interventions et conférences.