11.2. Types d'index

PostgreSQL propose plusieurs types d'index: B-tree, R-tree, GiST et Hash. Chaque type d'index utilise un algorithme différent qui convient à un type particulier de requêtes. Par défaut, la commande CREATE INDEX crée un index de type B-tree, qui convient à la plupart des situations. Les index B-tree savent traiter les égalités et les recherches sur des tranches de valeurs sur les données qui peuvent être triées. En particulier, l'optimiseur de requêtes de PostgreSQL essaie d'utiliser un index B-tree lorsque une colonne indexée est utilisée dans une comparaison qui utilise un de ces opérateurs: <, <=, =, >=, >

L'optimiseur peut aussi utiliser un index B-tree pour des requêtes qui utilisent les opérateurs de recherche de motif LIKE, ILIKE, ~, et ~*, si le motif est au début de la chaîne à rechercher. Par exemple: col LIKE 'foo%' ou col ~ '^foo', mais pas col LIKE '%bar'. Néanmoins, si votre serveur n'utilise pas la localisation C, il vous faudra créer l'index avec une classe d'opérateur spéciale. Voir Section 11.6 plus bas.

Les index R-tree sont adaptés aux requêtes sur des données spatiales. Pour créer un index R-tree, utilisez une commande de la forme:

CREATE INDEX name ON table USING RTREE (column);

L'optimiseur de requêtes de PostgreSQL envisagera d'utiliser un index R-tree lorsqu'une colonne indexée fait partie d'une comparaison utilisant l'un de ces opérateurs: <<, &<, &>, >>, @, ~=, && (Référez vous à Section 9.9 pour connaître la signification de ces opérateurs.)

Les index hachés ne supportent que les simples comparaisons d'égalité. L'optimiseur de requêtes envisagera d'utiliser un index haché lorsqu'une colonne indexée fait partie d'une comparaison utilisant l'opérateur =. La commande suivante est utilisée pour créer un index haché:

CREATE INDEX name ON table USING HASH (column);

Note : Les tests ont montré que les index hachés de PostgreSQL ne sont pas plus efficaces que les index B-tree, et que la taille de l'index et le temps de création d'un index hashé sont bien moins bons. Pour ces raisons, l'utilisation des index hachés est actuellement découragée.

La méthode d'index B-tree est une implémentation des B-trees à haute concurrence de Lehman-Yao. La méthode d'index R-tree implémente les R-tree standards en utilisant l'algorithme de découpage quadratique de Guttman. La méthode d'index par hachage est une implémentation de l'algorithme de hachage linéaire de Litwin. Nous ne mentionnons les algorithmes utilisés que pour indiquer que toutes ces méthodes d'indexation sont complètement dynamiques et n'ont pas besoin d'une optimisation périodique (au contraire, par exemple, des méthodes de hachage statique).