Index B-tree
Qu’est-ce qu’un index B-tree dans PostgreSQL ?
Le B-tree est le type d’index par défaut de PostgreSQL. Il gère les comparaisons d’égalité et d’intervalle sur des données triables et peut renvoyer les lignes déjà triées.
Un index B-tree conserve ses clés triées dans un arbre équilibré. CREATE INDEX construit un B-tree sauf si vous choisissez un autre type, et PostgreSQL utilise aussi des B-tree pour les clés primaires et les contraintes d’unicité.
Le planificateur peut utiliser un B-tree pour les comparaisons avec <, <=, =, >= et >, pour BETWEEN et IN, ainsi que pour IS NULL et IS NOT NULL. Il peut aussi renvoyer les lignes dans l’ordre de l’index, ce qui peut éviter un tri séparé pour ORDER BY. Chaque index accélère certaines lectures et alourdit chaque écriture : indexez donc les colonnes sur lesquelles vos requêtes filtrent ou trient réellement.
Exemple
L’exemple indexe une colonne d’horodatage et interroge EXPLAIN sur les lignes de la dernière heure. La sortie affiche Index Scan using logs_created_at_idx.
CREATE TABLE logs (
id bigint GENERATED ALWAYS AS IDENTITY,
created_at timestamptz NOT NULL
);
INSERT INTO logs (created_at)
SELECT now() - g * interval '1 minute' FROM generate_series(1, 100000) AS g;
CREATE INDEX logs_created_at_idx ON logs (created_at);
ANALYZE logs;
EXPLAIN SELECT * FROM logs WHERE created_at > now() - interval '1 hour';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).