CREATE INDEX

Nom

CREATE INDEX -- d�finit un nouvel index

Synopsis

CREATE [ UNIQUE ] INDEX nom ON table [ USING m�thode ]
    ( { colonne | ( expression ) } [ classeop ] [, ...] )
    [ WHERE pr�dicat ]

Description

CREATE INDEX construit un index nom_index sur la table sp�cifi�e. Les index sont principalement utilis�s pour am�liorer les performances de la base de donn�es (bien qu'une utilisation inappropri�e r�sultera en des performances moindres).

Les champs cl� pour l'index sont sp�cifi�s par les noms des colonnes ou comme des expressions �crites entre parenth�ses. Plusieurs champs peuvent �tre sp�cifi�s si la m�thode d'indexage supporte les index multi-colonnes.

Un champ index peut �tre une expression calcul�e � partir des valeurs d'une ou plusieurs colonnes d'une ligne d'une table. Cette fonctionnalit� peut �tre utilis�e pour obtenir un acc�s rapide aux donn�es bas�es sur quelques transformations des donn�es basiques. Par exemple, un index calcul� sur upper(col) permettra l'utilisation d'un index par WHERE upper(col) = 'JIM'.

PostgreSQL fournit les m�thodes d'indexage B-tree, R-tree, hash et GiST. La m�thode d'indexage B-tree est une impl�mentation des arbres balanc�es � haute concurrence de Lehman-Yao. La m�thode d'indexage R-tree impl�mente les R-tree en utilisant l'algorithme divis� quadratique de Guttman. La m�thode d'indexage hash est une impl�mentation du d�coupage linaire de Litwin. Les utilisateurs peuvent aussi d�finir leur propre m�thode d'indexage mais ceci est particuli�rement compliqu�.

Lorsque la clause WHERE est pr�sente, un index partiel est cr��. Un index partiel est un index contenant des entr�es pour seulement une portion d'une table, habituellement une portion qui est un peu plus int�ressante que le reste de la table. Par exemple, si vous disposez d'une table contenant des ordres factur�s et non factur�s o� les ordres non factur�s prennent une petite fraction du total de la table et qu'il s'agit en plus d'une section fr�quemment utilis�e, vous pouvez am�liorer les performances en cr�ant un index sur cette portion. Une autre application possible est d'utiliser WHERE avec UNIQUE pour renforcer l'unicit� sur un sous-ensemble d'une table.

L'expression utilis�e dans la clause WHERE pourrait r�f�rencer seulement les colonnes de la table sous-jacente (mais il peut utiliser toute les colonnes, pas seulement celles en cours d'indexage). Actuellement, les sous-requ�tes et les expressions d'agr�gats sont aussi interdites dans WHERE. Les m�mes restrictions s'appliquent aux champs d'index qui sont des expressions.

Toutes les fonctions et op�rateurs utilis�s dans la d�finition d'index doivent �tre <<�immutable�>>, c'est-�-dire que leur r�sultat doit uniquement d�pendre de leurs arguments et jamais d'une influence externe (telle que le contenu d'une autre table ou l'heure actuelle). Cette restriction permet de s'assurer que le comportement de l'index est bien d�fini. Pour utiliser une fonction d�finie par l'utilisateur dans une expression d'index ou dans une clause WHERE, rappelez-vous de marquer la fonction comme immutable lorsque vous la cr�ez.

Param�tres

UNIQUE

Fait que le syst�me v�rifie les valeurs dupliqu�es dans la table � la cr�ation de l'index (si des donn�es existent d�j�) et � chaque fois qu'une donn�e est ajout�e. Les tentatives d'insertion ou de mises � jour qui r�sulteraient en des entr�es dupliqu�es g�n�reront une erreur.

nom

Le nom de l'index � cr�er. Aucun nom de sch�ma ne peut �tre inclus ici ; l'index est toujours cr�� dans le m�me sch�ma que sa table parent.

table

Le nom de la table � indexer (pouvant �tre qualifi� du nom du sch�ma).

m�thode

Le nom de la m�thode � utiliser pour l'index. Les choix sont btree, hash, rtree et gist. La m�thode par d�faut est btree.

colonne

Le nom d'une colonne de la table.

expression

Une expression bas�e sur une ou plusieurs colonnes de la table. L'expression doit habituellement �tre �crite en l'entourant de parenth�ses, comme le montre la syntaxe. N�anmoins, les parenth�ses peuvent �tre oubli�es si l'expression est de la forme d'un appel de fonction.

classeop

Le nom d'une classe d'op�rateur. Voir ci-dessous pour les d�tails.

pr�dicat

L'expression de contrainte pour un index partiel.

Notes

Voir Chapitre 11 pour des informations sur le moment o� les index sont utilis�s, quand ils ne le sont pas et dans quelles situations particuli�res ils peuvent �tre utiles.

Actuellement, seules les m�thodes d'indexage B-tree et GiST supportent les index multi-colonnes. Jusqu'� 32 champs peuvent �tre sp�cifi�s par d�faut. (Cette limite peut �tre modifi�e lors de la construction de PostgreSQL.) Seul B-tree supporte actuellement les index uniques.

Une classe d'op�rateur peut �tre sp�cifi�e pour chaque colonne d'un index. La classe d'op�rateur identifie les op�rateurs � utiliser par l'index pour cette colonne. Par exemple, un index B-tree sur des entiers sur quatre octets utiliserait la classe int4_ops ; cette classe d'op�rateur inclut des fonctions de comparaison pour les entiers sur quatre octets. En pratique, la classe d'op�rateur par d�faut pour le type de donn�es de la colonne est g�n�ralement suffisant. Le point principal pour avoir des classes d'op�rateur est que pour certains types de donn�es, il pourrait y avoir plus d'un ordonnancement significatif. Par exemple, nous pourrions vouloir trier un type de donn�es <<�nombre complexe�>> soit par sa valeur absolue soit par sa partie r�elle. Nous pourrions le faire en d�finissant deux classes d'op�rateur pour le type de donn�es, puis en s�lectionnant la bonne classe lors de la cr�ation d'un index. Plus d'informations sur les classes d'op�rateurs sont disponibles dans Section 11.6 et dans Section 33.13.

Utilisez DROP INDEX pour supprimer un index.

Exemples

Pour cr�er un index B-tree sur la colonne titre dans la table films :

CREATE UNIQUE INDEX title_idx ON films (title);

Compatibilit�

CREATE INDEX est une extension du langage PostgreSQL. Les index n'existent pas dans le standard SQL.