11.3. Les index multicolonnes

Un index peut porter sur plus d'une colonne. Par exemple, si vous avez une table de cette forme:

CREATE TABLE test2 (
  majeur int,
  mineur int,
  nom varchar
);

(par exemple, si vous gardez votre r�pertoire /dev dans une base de donn�es...) et que vous faites fr�quemment des requ�tes comme:

SELECT nom FROM test2 WHERE majeur = constante AND mineur = constante;

alors il est sans doute souhaitable de d�finir un index sur les colonnes majeur et mineur ensemble, par exemple avec:,

CREATE INDEX test2_mm_idx ON test2 (majeur, mineur);

Actuellement, seuls les B-trees et les index GiST supportent les index multicolonnes. Jusqu'� 32 colonnes peuvent �tre index�es. Cette limite peut �tre modifi�e � la compilation de PostgreSQL. Voyez le fichier pg_config_manual.h.

L'optimiseur de requ�tes peut utiliser un index multicolonnes pour les requ�tes qui utilisent la colonnes la plus � gauche de la d�finition de l'index, plus un nombre quelconque des colonnes list�es � sa droite, sans trou. Par exemple, un index sur (a, b, c) peut �tre utilis� dans des requ�tes utilisant a, b, et c, ou dans des requ�tes utilisant � la fois a et b, ou dans des requ�tes n'utilisant que a, mais pas dans une requ�te utilisant une autre combinaison. (Dans une requ�te utilisant a et c, l'optimiseur pourrait choisir d'utiliser l'index pour a, en traitant c comme une colonne ordinaire non index�e.) Bien sur, chaque colonne doit �tre utilis�e avec les op�rateurs appropri�s pour le type d'index. Les clauses qui comprennent un autre op�rateur ne seront pas prises en compte.

Les index multicolonnes ne peuvent �tre utilis�s que si les clauses des colonnes index�es sont jointes avec AND. Par exemple,

SELECT nom FROM test2 WHERE majeur = constant OR mineur = constant;

ne peut utiliser l'index test2_mm_idx (d�fini pr�c�demment) sur les deux colonnes. (Il peut n�anmoins l'utiliser pour faire une recherche sur la colonne major.)

Les index multicolonnes doivent �tre utilis�s avec parcimonie. La plupart du temps, un index sur une seule colonne est suffisant et �conomise du temps et de l'espace disque. Les index avec plus de trois colonnes sont rarement utiles, sauf cas tr�s particuliers.