11.2. Types d'index

PostgreSQL propose plusieurs types d'index: B-tree, R-tree, Hash et GiST. 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éera un index B-tree, ce qui convient dans 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:

<
<=
=
>=
>

Les constructions équivalentes à des combinaisons de ces opérateurs, comme BETWEEN et IN, peuvent aussi être implémentées avec une recherche par index B-tree. (Mais notez que IS NULL n'est pas équivalent à = et n'est pas indexable.)

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 pour supporter l'indexage à correspondance de modèles. Voir Section 11.6 ci-dessous.

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:

<<
&<
&>
>>
@
~=
&&

(Voir Section 9.10 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.

Les index GiST ne sont pas un seul genre d'index mais plutôt une infrastructure à l'intérieur de laquelle plusieurs stratégies d'indexage peuvent être implémentées. EN accord, les opérateurs particuliers avec lesquels un index GiST peut être utilisé varient suivant sur la stratégie d'indexage (la classe d'opérateur). Pour plus d'informations, voir Chapitre 48.

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).